2015-05-16 39 views
0

我想通過對象的數組中的Android使用kso​​ap2 WCF服務的請求SOAP服務的請求。如何通過自定義對象的數組中使用kso​​ap2在android系統

我的XML請求如下所示:

<tem:bookItems> 
    <res:bookItem> 
     <res:name>"abcd"</res:name> 
     <res:price>150</res:price> 
    </res:bookItem> 
    <res:bookItem> 
     <res:name>"efgh"</res:name> 
     <res:price>250</res:price> 
    </res:bookItem> 
</tem:bookItems> 

我是不是能夠找到一個合適的回答,我完全被卡住。請幫忙。

回答

0

你應該有意在ksoap2 org.ksoap2.serialization.KvmSerializable接口。

對於任何數組對象,您可以創建public abstract class LiteralArrayVector extends Vector implements KvmSerializable

LiteralArrayVector最好應該有以下幾點:

  1. 註冊您的SOAP信封對象

    public void register(SoapSerializationEnvelope envelope, String namespace, String name)

    envelope.addMapping(namespace, name, this.getClass()); registerElementClass(envelope, namespace);

  2. 定義private void registerElementClass(SoapSerializationEnvelope envelope, String namespace)envelope.addMapping(namespace, "", elementClass);

    Class elementClass = getElementClass();

    //在具體類的LiteralArrayVector,比方說,ArrayOfBookItem,覆蓋的supergetElementClass(),來回報您BookItem元素類

    喜歡的東西:

    protected Class getElementClass() { return new BookItem().getClass(); }

getItemDescriptor返回名稱你的元素, 「BookItem」

KvmSerializable
  • getPropertyInfo()應該重寫使得PropertyInfo應該對你的BookItem

    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { info.name = getItemDescriptor(); info.type = getElementClass(); }

  • ArrayOfBookItem名稱和類型應該覆蓋LiteralArrayVectorregister,以便它調用super(...)並且具有new BookItem().register(envelope)

    當我說register(...)我的意思是一些方法來爲你的元素添加映射SoapSerializationEnvelope

    public void register(SoapSerializationEnvelope envelope) { 
        envelope.addMapping(NAMESPACE, "BookItem", this.getClass()); 
    } 
    

    看看是否有幫助!

    +0

    感謝您的答覆。我的肥皂服務期待'列表 bookItems'。所以上面的代碼可以達到目的,並且如果您可以請分享完整的代碼。無法完成整個步驟。試圖鞏固所提到的步驟。 – dreamdeveloper

    0

    經過大量的搜索和調查,發現了一個非常簡單的方法來做到上述。我只是將我的服務更改爲接受一組JSON對象而不是對象列表。它像魅力一樣工作,問題在幾分鐘內就解決了。 這裏是修改的服務請求,


    <tem:bookItems>[{"name": "abcd", "price": "150"}, { "name": "efgh", "price": "250"} ]</tem:bookItems> 
    

    而且從應用我們通過對象一樣,

     JSONArray jsonArr = new JSONArray(); 
    
          JSONObject bookObj = new JSONObject(); 
          try { 
           bookObj.put("name","abcd"); 
           bookObj.put("price","150"); 
    
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
          jsonArr.put(bookObj); 
         } 
         //the below string will be passed to service 
         String bookItems = jsonArr.toString(); 
    
    相關問題