Android通過ksoap2傳遞復雜數(shù)據(jù)類型及CXF發(fā)布的webservice詳細介紹
Android通過ksoap2傳遞復雜數(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ò)不能放在主線程哦,不然要報錯的
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 在Android中訪問WebService接口的方法
- Android開發(fā)調(diào)用WebService的方法示例
- Android 中利用 ksoap2 調(diào)用 WebService的示例代碼
- Android ksoap調(diào)用webservice批量上傳多張圖片詳解
- Android 通過webservice上傳多張圖片到指定服務(wù)器詳解
- 在Android中調(diào)用WebService實例
- Android通過Webservice操作sqlserver數(shù)據(jù)庫實例代碼
- android調(diào)用WebService實例分析
- android中soap協(xié)議使用(ksoap調(diào)用webservice)
- android調(diào)用webservice接口獲取信息
相關(guān)文章
Flutter Android應(yīng)用啟動白屏的解決方案
任何一個app基本都會設(shè)計一個啟動頁,今天我們就來看看怎么在flutter項目中設(shè)置啟動頁,這篇文章主要給大家介紹了關(guān)于Flutter Android應(yīng)用啟動白屏解決的相關(guān)資料,需要的朋友可以參考下2021-11-11
Android開發(fā)中日期工具類DateUtil完整實例
這篇文章主要介紹了Android開發(fā)中日期工具類DateUtil,結(jié)合完整實例形式分析了Android針對日期與時間的計算、轉(zhuǎn)換、格式化、獲取等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android中的Shape和Selector的結(jié)合使用實例
這篇文章主要介紹了Android中的Shape和Selector的結(jié)合使用實例,本文直接給出實例代碼,需要的朋友可以參考下2015-06-06
Android使用fragment實現(xiàn)左側(cè)導航
這篇文章主要為大家詳細介紹了Android使用fragment實現(xiàn)左側(cè)導航,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
Android實現(xiàn)網(wǎng)易云音樂高仿版流程
這篇文章主要介紹了Android實現(xiàn)網(wǎng)易云音樂高仿版,包含了首頁復雜發(fā)現(xiàn)界面布局和功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
Android編程實現(xiàn)基于BitMap獲得圖片像素數(shù)據(jù)的方法
這篇文章主要介紹了Android編程實現(xiàn)基于BitMap獲得圖片像素數(shù)據(jù)的方法,對比分析了兩種獲取圖片像素的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
Android uses-permission權(quán)限列表中文注釋版
Android有一個精心設(shè)計的安全模型。每一個應(yīng)用都有其自己Linux用戶和群組,在單獨的進程和VM上運行,不能影響到其他應(yīng)用2014-05-05
Android開發(fā)使用strings.xml多語言翻譯解決方案
這篇文章主要為大家介紹了Android開發(fā)使用strings.xml多語言翻譯解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

