国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android通過ksoap2傳遞復(fù)雜數(shù)據(jù)類型及CXF發(fā)布的webservice詳細介紹

2019-10-23 19:45:35
字體:
供稿:網(wǎng)友

 Android通過ksoap2傳遞復(fù)雜數(shù)據(jù)類型及CXF發(fā)布的webservice詳細介紹

最近在學校搞點東西,搞了2天的webservice,心累呀,今天中午和小伙伴終于弄通了,感覺就是一些細節(jié)問題沒有注意到,啊,我的時間呀,進這么過去了,為了不讓小伙伴們走彎路,我還是認真的把開發(fā)文檔寫一遍吧!

首先,如果我們要用CXF發(fā)布webservice用自定義類型的對象來當參數(shù)傳遞的話,我們應(yīng)該先把這個類序列化一遍,下面就是我測試的代碼,我創(chuàng)建了一個TGrade類,實現(xiàn)了KvmSerializable接口,這個接口里面的三個方法,這個接口的好處在于不需要服務(wù)端在去反序列化實體對象了,

public class TGrade implements KvmSerializable {    // Fields    private Integer GId;   private Integer GMax;   private Integer GMin;   private String GName;   private String GPic;   private String GType;      // Constructors   /** default constructor */   public TGrade() {   }    /** minimal constructor */   public TGrade(Integer GMax) {     this.GMax = GMax;   }    /** full constructor */   public TGrade(Integer GMax, Integer GMin, String GName, String GPic,       String GType) {     this.GMax = GMax;     this.GMin = GMin;     this.GName = GName;     this.GPic = GPic;     this.GType = GType;   }    // Property accessors   public Integer getGId() {     return this.GId;   }    public void setGId(Integer GId) {     this.GId = GId;   }    public Integer getGMax() {     return this.GMax;   }    public void setGMax(Integer GMax) {     this.GMax = GMax;   }    public Integer getGMin() {     return this.GMin;   }    public void setGMin(Integer GMin) {     this.GMin = GMin;   }    public String getGName() {     return this.GName;   }    public void setGName(String GName) {     this.GName = GName;   }    public String getGPic() {     return this.GPic;   }    public void setGPic(String GPic) {     this.GPic = GPic;   }    public String getGType() {     return this.GType;   }    public void setGType(String GType) {     this.GType = GType;   }    @Override   public Object getProperty(int arg0) {     switch (arg0) {      case 0:        return GId;      case 1:        return GMax;      case 2:        return GMin;      case 3:        return GName;      case 4:        return GPic;     case 5:        return GType;      default:        break;      }      return null;    }    @Override   public int getPropertyCount() {     // TODO Auto-generated method stub     return 6;//y要注意這里,必須等于參數(shù)的個數(shù),不然服務(wù)端沒有辦法接受有些參數(shù)   }    @Override   public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {     switch (arg0) {     case 0:        arg2.type = PropertyInfo.STRING_CLASS;        arg2.name = "GId";        break;      case 1:        arg2.type = PropertyInfo.STRING_CLASS;        arg2.name = "GMax";        break;      case 2:        arg2.type = PropertyInfo.STRING_CLASS;        arg2.name = "GMin";        break;      case 3:        arg2.type = PropertyInfo.STRING_CLASS;        arg2.name = "GName";        break;      case 4:        arg2.type = PropertyInfo.STRING_CLASS;        arg2.name = "GPic";        break;      case 5:        arg2.type = PropertyInfo.STRING_CLASS;        arg2.name = "GType";        break;      default:        break;      }       }    @Override   public void setProperty(int arg0, Object arg1) {     switch (arg0) {     case 0:       GId=Integer.parseInt(arg1.toString());       break;     case 1:       GMax=Integer.parseInt(arg1.toString());        break;     case 2:       GMin=Integer.parseInt(arg1.toString());        break;     case 3:       GName=arg1.toString();        break;     case 4:       GPic=arg1.toString();        break;     case 5:        GType=arg1.toString();       break;      default:       break;     }   }    }  //-----------------------------下面是我測試部分的代碼,這部分代碼很重要,需要認真的看,我也寫的比較詳細,代碼的世界模糊不得  public boolean addMaintenanceInfo() {     String methodName = "addGrade";//服務(wù)端的方法     String soapAction =“http://10.127.80.67/gbckf/Android/GradeService”+methodName;          TGrade person = new TGrade();     person.setProperty(0, "6");     person.setProperty(1, 1);     person.setProperty(3, "1");     person.setProperty(4, "1");     person.setProperty(5, "1");     // 建立webservice連接對象     HttpTransportSE transport = new HttpTransportSE(AgbcApi.GRADESERVICEURL,5000);//5秒超時     transport.debug = true;// 是否是調(diào)試模式     // 設(shè)置連接參數(shù)     SoapObject soapObject = new SoapObject(AgbcApi.NAMESPACE, methodName);     PropertyInfo objekt = new PropertyInfo();     objekt.setName("arg0");//這個arg0很重要,不能是其他的東西,只能是arg0,不要問我為何,不然你就永遠接受不了參數(shù),因為是xml文檔類型的東西     objekt.setValue(person);     objekt.setType(TGrade.class);     soapObject.addProperty(objekt);     // 設(shè)置返回參數(shù)     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// soap協(xié)議版本必須用SoapEnvelope.VER11(Soap     envelope.dotNet = false;// 注意:這個屬性是對dotnetwebservice協(xié)議的支持,如果dotnet的webservice     envelope.bodyOut = transport;     Log.i("請求參數(shù)", soapObject.toString());     envelope.setOutputSoapObject(soapObject);// 設(shè)置請求參數(shù)       envelope.addMapping(AgbcApi.NAMESPACE, "addGrade", TGrade.class);// 傳對象時必須,參數(shù)namespace是webservice中指定的,       (new MarshalBase64()).register(envelope);       try {       transport.call(soapAction, envelope);       if(envelope.bodyIn instanceof SoapFault){         String str = ((SoapFault) envelope.bodyIn).faultstring;         Log.i("空節(jié)點返回的東西", str);       }else {         // SoapObject sb = (SoapObject)envelope.bodyIn;//服務(wù)器返回的對象存在envelope的bodyIn中         Object obj = envelope.getResponse();// 直接將返回值強制轉(zhuǎn)換為已知對象         //Log.d("WebService", "返回結(jié)果:" + obj.toString());       }     }     catch (IOException e) {       e.printStackTrace();     }     catch (XmlPullParserException e) {       e.printStackTrace();     }     catch (Exception ex) {       ex.printStackTrace();     }      return true; 

上面是我親手寫的代碼,若是沒有明白小伙伴,給我留言我給你看看吧,注意請求網(wǎng)絡(luò)不能放在主線程哦,不然要報錯的

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 繁峙县| 栖霞市| 高雄市| 左云县| 贵州省| 金塔县| 嘉定区| 九龙县| 环江| 栾城县| 湟中县| 饶阳县| 库车县| 临潭县| 吴堡县| 新野县| 孙吴县| 比如县| 鄱阳县| 曲周县| 丹寨县| 阿巴嘎旗| 元江| 宁安市| 屏东市| 新巴尔虎左旗| 塔河县| 尖扎县| 安化县| 常州市| 迭部县| 寿宁县| 额济纳旗| 咸宁市| 齐齐哈尔市| 梨树县| 湖南省| 都兰县| 衡东县| 辽中县| 剑川县|