android中soap協(xié)議使用(ksoap調(diào)用webservice)
如下面代碼所示:
SoapObject request = new SoapObject(serviceNamespace, methodName);
SoapObject構(gòu)造函數(shù)的兩個(gè)參數(shù)含義為:
serviceNamespace – 你的webservice的命名空間,既可以是
http://localhost:8088/flickrBuddy/services/Buddycast這樣的,也可以是 urn:PI/DevCentral/SoapService這樣的;
methodName – 你要調(diào)用方法的名字。
然后,按照webservice方法參數(shù)的順序,依次調(diào)用
request.addProperty( "username", "user" );
request.addProperty( "password", "pass" );
來填充webservice參數(shù)。
注意:
建議webservice的方法傳遞的參數(shù)盡量用string類型。即使是int類型,kSOAP2與Java編寫的webservice也有可能交互發(fā)生異常。
對(duì)于webservice方法返回String類型的情況,還用不著開發(fā)者做序列化(Serialization)定制工作。
要點(diǎn):
kSOAP 1.X/2.0可以自動(dòng)把四種SOAP類型映射為Java類型
SOAP type Java type
xsd:int java.lang.Integer
xsd:long java.lang.Long
xsd:string java.lang.String
xsd:boolean java.lang.Boolean
除此之外,都需要開發(fā)者自己做類型映射。
然后要告訴SoapSerializationEnvelope把構(gòu)造好的SoapObject封裝進(jìn)去:
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
要點(diǎn):
你可以通過SoapSerializationEnvelope或者SoapEnvelope的構(gòu)造函數(shù)來指明你要用SOAP的哪一個(gè)規(guī)范,可以是以下幾種之一:
常量SoapEnvelope.VER10:對(duì)應(yīng)于SOAP 1.0規(guī)范
常量SoapEnvelope.VER11:對(duì)應(yīng)于SOAP 1.1規(guī)范
常量SoapEnvelope.VER12:對(duì)應(yīng)于SOAP 1.2規(guī)范
這樣,無論要調(diào)用的webservice采用了哪一個(gè)SOAP規(guī)范,你都可以輕松應(yīng)對(duì)。
接下來就要聲明
HttpTransport tx = new HttpTransport(serviceURL);
ht.debug = true;
HttpTransport構(gòu)造函數(shù)的參數(shù)含義為:
serviceURL – 要投遞SOAP數(shù)據(jù)的目標(biāo)地址,譬如說
http://soap.amazon.com/onca/soap3 。
HttpTransport是一個(gè)強(qiáng)大的輔助類,來完成Http-call transport process,它封裝了網(wǎng)絡(luò)請(qǐng)求的一切,你完全不用考慮序列化消息。我們通過設(shè)置它的debug屬性為true來打開調(diào)試信息。
方法HttpTransport.call()自己就能夠發(fā)送請(qǐng)求給服務(wù)器、接收服務(wù)器響應(yīng)并序列化SOAP消息,如下所示:
ht.call(null, envelope);
HttpTransport的call方法的兩個(gè)參數(shù)含義為:
soapAction – SOAP 規(guī)范定義了一個(gè)名為 SOAPAction 的新 HTTP 標(biāo)頭,所有 SOAP HTTP 請(qǐng)求(即使是空的)都必須包含該標(biāo)頭。 SOAPAction 標(biāo)頭旨在表明該消息的意圖。通常可以置此參數(shù)為null,這樣HttpTransport就會(huì)設(shè)置HTTP標(biāo)頭SOAPAction為空字符串。
Envelope – 就是前面我們構(gòu)造好的SoapSerializationEnvelope或SoapEnvelope對(duì)象。
注意:
對(duì)于HttpTransport的處理上,kSOAP2和kSOAP1.2的寫法不一樣。
對(duì)于kSOAP 1.2,HttpTransport的構(gòu)造函數(shù)是HttpTransport (String url, String soapAction),第二個(gè)參數(shù)soapAction可以是要調(diào)用的webservice方法名。
而kSOAP 2,構(gòu)造函數(shù)是 HttpTransport(String url)。kSOAP2相當(dāng)于把webservice方法名分離出去,完全交給SoapObject去封裝,而HttpTransport僅僅負(fù)責(zé)把 SoapEnvelope發(fā)送出去并接收響應(yīng),這樣更合理一些。
調(diào)用call方法是一個(gè)同步過程,需要等待它返回。
返回之后,就可以調(diào)用SoapSerializationEnvelope的getResult方法來獲取結(jié)果了:
Object Response = envelope.getResult();
如果HttpTransport的debug屬性為true,那么此時(shí)就可以通過
System.out.println("Response dump>>" + tx.responseDump);
打印出HttpTransport的調(diào)試信息。尤其當(dāng)前面call方法和getResult方法發(fā)生異常時(shí),這個(gè)調(diào)試信息是非常有用的。
前面我們的webservice方法由于是返回string,所以得到這個(gè)string值就非常簡(jiǎn)單了:
String sResponse = (String)Response;
注意:
由于HttpTransport類實(shí)際上是調(diào)用了HttpConnection作網(wǎng)絡(luò)連接,所以必須另起一個(gè)線程來專門做kSOAP工作,否則會(huì)堵塞操作。
- 在Android中訪問WebService接口的方法
- Android開發(fā)調(diào)用WebService的方法示例
- Android 中利用 ksoap2 調(diào)用 WebService的示例代碼
- Android ksoap調(diào)用webservice批量上傳多張圖片詳解
- Android 通過webservice上傳多張圖片到指定服務(wù)器詳解
- Android通過ksoap2傳遞復(fù)雜數(shù)據(jù)類型及CXF發(fā)布的webservice詳細(xì)介紹
- 在Android中調(diào)用WebService實(shí)例
- Android通過Webservice操作sqlserver數(shù)據(jù)庫實(shí)例代碼
- android調(diào)用WebService實(shí)例分析
- android調(diào)用webservice接口獲取信息
相關(guān)文章
Android設(shè)備adb連接后顯示device unauthorized解決方案
這篇文章主要為大家介紹了Android設(shè)備adb連接后顯示device unauthorized解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06基于Alarmmanager實(shí)現(xiàn)簡(jiǎn)單鬧鐘功能
這篇文章主要為大家詳細(xì)介紹了基于Alarmmanager實(shí)現(xiàn)簡(jiǎn)單鬧鐘功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android防止點(diǎn)擊過快造成多次響應(yīng)事件的解決方法
btn點(diǎn)擊用戶可能只點(diǎn)擊了一次但是后臺(tái)響應(yīng)了多次,像一些表單的提交出現(xiàn)這種問題比較棘手,本篇文章主要介紹Android防止點(diǎn)擊過快造成多次響應(yīng)事件的解決方法,有興趣的可以了解一下。2016-12-12Android自定義動(dòng)態(tài)壁紙開發(fā)詳解
這篇文章主要為大家詳細(xì)介紹了Android自定義動(dòng)態(tài)壁紙開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Android listview數(shù)據(jù)顯示及提示信息的實(shí)例
這篇文章主要介紹了Android listview數(shù)據(jù)顯示及提示信息的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05Android Studio 多層級(jí) Module 對(duì) aar 引用問題解決方法
這篇文章主要介紹了Android Studio 多層級(jí) Module 對(duì) aar 引用問題的解決方法,需要的朋友參考下2017-12-12Android自定義控件實(shí)現(xiàn)不規(guī)則區(qū)域點(diǎn)擊事件
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)不規(guī)則區(qū)域點(diǎn)擊事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android RecycleView和線型布局制作聊天布局
大家好,本篇文章主要講的是Android RecycleView和線型布局制作聊天布局,感興趣的同學(xué)趕緊來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Android 自定義View實(shí)現(xiàn)任意布局的RadioGroup效果
這篇文章主要介紹了Android 自定義View實(shí)現(xiàn)任意布局的RadioGroup,需要的朋友可以參考下2018-11-11Android實(shí)現(xiàn)商城購物車功能的實(shí)例代碼
最近公司項(xiàng)目做商城模塊,需要實(shí)現(xiàn)購物車功能,主要實(shí)現(xiàn)了單選、全選,金額合計(jì),商品刪除,商品數(shù)量加減等功能,這篇文章主要介紹了Android實(shí)現(xiàn)商城購物車功能,需要的朋友可以參考下2019-06-06