在Android中調用KSOAP2庫訪問webservice服務出現的服務端返回AnyType{}


  最近在做畢業設計的時候,涉及到了安卓端訪問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>();

  有問題再來補充吧!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM