最近在做畢業設計的時候,涉及到了安卓端訪問web service服務端數據庫,並返回一個值,當我把web service測試通過后,想寫一個簡單的安卓測試程序,來實現服務端數據庫訪問,通過web service中的一個serch()方法,然后發現,每次的返回值都是一個AnyType{},Logcat如圖所示:
網上搜集了很多資料,產生的原因其實很簡答,是因為服務端返回值為null,Logcat中顯示的就職anyType{},找到了原因,解決起來也就好說了,其中包括這些方法:
{解決方法引用自博客園用戶日行一米,這里表示感謝}
1、只需要在 WebService的類屬性中加入SoapRpcServiceAttribute屬性就可以了。
[SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)]
2、參數名必須跟webservice方法中的參數名一致,因為ws將參數名自動改為了arg0、arg1,所有調用時參數也需要修改。
3、NAMESPACE 后面沒有加“/”
特此說明:
方法一我不知道去哪兒加,看博主在解決問題時候,說方法一加了之后,直接報了異常,我也就沒管。
方法二則是我解決問題的關鍵,看我的Logcat中,傳入參數為 username = 10010,所以傳過去之后變量是username(目前我是這樣認為),而webservice會將參數名自動改為arg0、arg1......所以參數不同,導致了傳回的結果變成了null,顯示return anyType{}。
//調用方法時需要傳入一個參數 //為了與web service保持一致,需要設置為arg0,因為web service會自動將其轉化為arg0 arg1 rpc.addProperty("arg0",username);
還有一個原因就是
//設置是否調用的是dotNet開發的WebService,服務器是.net的需要設置為true,java不用 envelope.dotNet = false;
我的服務端用的Java寫的,所以這個屬性應該設置為false。
至此,我的問題已經解決了!!!
2017.4.23
今天又遇到了同樣的問題,但是這次就是從以前的經驗中,來尋找問題了。我在返回一個存放有Map的List時候,出現了返回值為NULL的情況,Logcat里邊顯示的就是AnyType{},這次肯定是其他原因。
仔細觀察了一下代碼,發現我在定義Map的時候是這樣定義的:
HashMap<String, String> map = new HashMap<String,String>();
同理,拿我的List定義就是這樣:
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
相比之前的定義,不一樣的地方好像是Map<>中的兩個參數。可能因為返回的數據不一定都是String類型的原因吧,但真正為什么,我也不清楚。只是更改了一下里邊的參數這個返回值問題才解決,代碼如下:
1 ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>(); 2 HashMap<String, Object> map = new HashMap<String,Object>();
有問題再來補充吧!!!