ksoap2android
⑴ KSOAP2 Android怎麼提交復雜參數
使用JSON之類方法對數據進行編碼,就可以傳遞復雜的數據了。 伺服器收到數據之後,對數據進行解碼。然後就可以還原到對象。 然後就可以使用了。 PS:樓主以為只有XML可以,其實JSON比XML更精簡,比XML的體積更校
⑵ ksoap2 android 我想向服務的傳一個ArrayList<T> 怎麼傳 求答案
把ArrayList<T>轉換成Json或者XML.再傳過去..然後在介面這端解析.
⑶ 求助安卓使用KSOAP2出錯
你好,看下,不知道有用嗎
1. 必須確保應用已經添加了網路通信許可權
<uses-permission android:name="android.permission.INTERNET" />
2. soap請求的URL中的HOST部分不要使用ip地址,使用域名
3. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
中的SOAP VER要和服務端對應,也可以低於服務端,但是不能高於服務端。
上述三點缺一不可,我講述一下我的折騰過程供大家參考,
我最初由於馬虎,沒有做條件1 ,結果會報UnkownHostException,誤導我把域名改為IP,
把域名改為IP後,雖然不會報UnkownHostException了,但是會報缺少許可權,於是我加上條件1的許可權,
加完之後,一切都正確,就總是報 org.xmlpull.v1.XmlPullParserException: expected: START_TAG ,
於是嘗試修改SOAP信封版本,VER10 VER11 VER12 三種都試了,無效。
回憶起曾把請求URL中的域名改為IP,於是將IP改回域名,問題解決。
仔細看了一下服務端的版本,是VER11,於是嘗試用VER12發送請求,
又報org.xmlpull.v1.XmlPullParserException: expected: START_TAG 了。
嘗試用VER10,可以收到正確的response。
⑷ android 環境下 ksoap2 連接webservice.
1. 必須確保應用已經添加了網路通信許可權
<uses-permission android:name="android.permission.INTERNET" />
2. soap請求的URL中的HOST部分不要使用ip地址,使用域名
3. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
中的SOAP VER要和服務端對應,也可以低於服務端,但是不能高於服務端。
上述三點缺一不可,我講述一下我的折騰過程供大家參考,
我最初由於馬虎,沒有做條件1 ,結果會報UnkownHostException,誤導我把域名改為IP,
把域名改為IP後,雖然不會報UnkownHostException了,但是會報缺少許可權,於是我加上條件1的許可權,
加完之後,一切都正確,就總是報 org.xmlpull.v1.XmlPullParserException: expected: START_TAG ,
於是嘗試修改SOAP信封版本,VER10 VER11 VER12 三種都試了,無效。
回憶起曾把請求URL中的域名改為IP,於是將IP改回域名,問題解決。
仔細看了一下服務端的版本,是VER11,於是嘗試用VER12發送請求,
又報org.xmlpull.v1.XmlPullParserException: expected: START_TAG 了。
嘗試用VER10,可以收到正確的response。
⑸ android ksoap2 有沒有幫助文檔的
您好,很高興為您解答。
看下這個:http://ksoap2.sourceforge.net/doc/api/
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~ O(∩_∩)O~
⑹ Android 使用KSOAP2調用axis2+rampart的webservice
使用KSOAP2調用WebService 按如下6步來調用WebService的方法。
1. 指定WebService的命名空間和調用的方法名,代碼如下:
SoapObject request = new SoapObject("http://service", "getName");
SoapObject類的第1個參數表示WebService的命名空間,可以從WSDL文檔中找到WebService的命名空間。第2個參數表示要調用的WebService方法名。
2. 設置調用方法的參數值,這一步是可選的,如果方法沒有參數,可以省略這一步。設置方法的參數值的代碼如下:
request.addProperty("param1", "value1");
request.addProperty("param2", "value2");
要注意的是,addProperty方法的第1個參數雖然表示調用方法的參數名,但該參數值並不一定與服務端的WebService類中的方法參數名一致,只要設置參數的順序一致即可。
3. 生成調用WebService方法的SOAP請求信息。該信息由SoapSerializationEnvelope對象描述,代碼如下:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
創建SoapSerializationEnvelope對象時需要通過SoapSerializationEnvelope類的構造方法設置SOAP協 議的版本號。該版本號需要根據服務端WebService的版本號設置。在創建SoapSerializationEnvelope對象後,不要忘了設置 SoapSerializationEnvelope類的bodyOut屬性,該屬性的值就是在第1步創建的SoapObject對象。
4. 創建HttpTransportSE對象。通過HttpTransportSE類的構造方法可以指定WebService的WSDL文檔的URL,代碼如下:
HttpTransportSE ht =
new HttpTransportSE("http://192.168.17.156:8080/axis2/services/SearchProctService?wsdl");
5. 使用call方法調用WebService方法,代碼如下:
ht.call(null, envelope);
call方法的第1個參數一般為null,第2個參數就是在第3步創建的SoapSerializationEnvelope對象。
6. 使用getResponse方法獲得WebService方法的返回結果,代碼如下:
SoapObject soapObject = (SoapObject) envelope.getResponse();
⑺ android中ksoap2中不能序列化byte嗎
ksoap2-android和cxf服務連接時的序列化問題處理
目前項目要用到webservice來和後端交互,後端使用的cxf編寫,用的jaxb做序列化。當中遇到了ksoap2-android發出的報文不能被正確解析的問題,遂在這里發文以共享。
當中一共遇到了3個問題:
(1)命名空間前綴的問題
(2)復雜對象的命名問題
最後一個問題容易解決,在此逐一說明:
(1)命名空間前綴的問題:
在webservice中,一個請求報文能夠被正確解析,報文的格式是首先的。在其官網提供的資料中,一般很少提及服務端是什麼類型,網上有見到用axis做服務端的。不過,由於cxf本身的一些較好特性,我們的項目中使用了cxf。ksoap2-android提供了一個開關項Dotnet來控制一個元素是否添加名字空間前綴,來解決兼容性問題。但是, 在調試過程中發現,在請求包的body元素的第一層元素,就是調用方法元素上,如果不攜帶命名空間,對端無法正確解析,這是因為cxf在發布WSDL時,其中的元素都帶有命名空間,而此時使用的Dotnet開關是true,也許是設計者習慣於這種方式吧,其實按照字面理解,此時應當是:true表明要兼容DOTNET,所以會加上命名空間前綴,而false表明不需要兼容,則不加前綴。不過這個問題無傷大雅。
改變開關後,所有元素都加上了前綴,但是參數部分又無法解析,根據錯誤信息判斷是參數部分不能使用加前綴方式來標明命名空間,而應使用屬性方式。
此問題的解決是下載了其源碼包,並從原來的SoapSerializationEnvelope和SoapObject分別派生新的子類。
SoapSerializationEnvelope的序列化時,讀取帶序列化對象的Dotnet參數來確定是否使用前綴方式的命名空間。SoapObject的派生對象則相應的添加Dotnet屬性供序列化方法讀取。這樣的話,就是分開處理的策略,從而解決了這個問題。
(2)復雜對象的命名問題
調用參數的添加官方文檔給了示例,但是不夠明確詳盡,在這里補充之:請求包的參數元素的名字應當和其在WSDL中的方法描述中的名字一致。對此,在構建請求的對象時,將SoapObject以相應名稱的Property添加即可。對於復雜類型對象,在構建對應的SoapObject時,其第二個參數要使用短類名類進行。有的文檔中在給出實例時,稱第二個參數為methodname,是不對的,其應當是elementName的含義。
⑻ android studio 用ksoap2調用webservice 求實例
下是調用的幾個主要的方法:
1.創建HttpTransportSE傳輸對象:HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); SERVICE_URL是webservice提供服務的url
2.使用SOAP1.1協議創建Envelop對象:SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 設置SOAP協議的版本號,根據服務端WebService的版本號設置。
3.實例化SoapObject對象:SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, methodName); 第一個參數表示WebService的命名空間,可以從WSDL文檔中找到WebService的命名空間。第二個參數表示要調用的WebService方法名。
4.設置調用方法的參數值,如果沒有參數,可以省略:例如soapObject.addProperty("theCityCode", cityName);
5.記得設置bodyout屬性 envelope.bodyOut = soapObject;
6.調用webservice:ht.call(SERVICE_NAMESPACE+methodName, envelope);
7.獲取伺服器響應返回的SOAP消息:
SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty(methodName+"Result");
⑼ 我的Java程序中導入ksoap2-android jar包,studio提示沒有主清單屬性,在工程libs文件加下已顯示添加的包
刷新了嗎:
這里有沒有添加進編譯