2012-12-05 69 views
0

我試圖使用kso​​ap2-android將WS的XML響應綁定到一組POJO的類。
在互聯網上的很多例子對待非常簡單的回答like this one
然而,在我的情況下,我有很多自定義類,它們保持彼此的引用,有時甚至在一個數組列表中。使用KSOAP2綁定嵌套的複雜對象Android

這裏就是我想要做的,我想這樣的回答綁定:

<Car number="35"> 
    <Engine> 
     [...] 
    </Engine> 
    <Passenger id="1"> 
     [...] 
    </Passenger> 
    <Passenger id="2"> 
     [...] 
    </Passenger> 
</Car> 

對於這種類:

public class Car { 

    private int number; 
    private Engine engine; 
    private ArrayList<Passenger> passengers; 

} 

有了,如果可能的話,只有修改POJOs文件(簡單XML註釋系統非常優雅,太糟糕了,在ksoap中沒有這個相同的內容)。我看着KVMSerializable接口,但是當我嘗試重寫getPropertyInfo()方法時,我不知道應該在PropertyInfo.type中返回什麼,以及ksoap如何處理ArrayLists。

我得到了巨大的頭痛,現在,請大家幫我

+0

你有沒有發現任何回答 – Umair

回答

0

您應該KSOAP 2讀the document,他們有很多有用的例子在那裏。
爲了獲得一個複雜類型的數組,你可以檢查here
而我已經使用this approach來解析一個複雜的對象。
如果它們全部不起作用,則必須從肥皂對象到POJO逐字段映射。
更新

非常感謝第三環節,它是非常有用的,現在我能 地圖自定義對象。但是,在您提供的wiki頁面中,作者 正在解析包裝在父元素中的自定義類的數組。 有沒有一種方法可以像我的例子一樣使用內聯列表來實現這一點?

我從來沒有嘗試過,但我認爲你可以結合我的答案和維基。 首先,你可以嘗試一個例子從維基實現你的乘客列表(擴展向量)。然後你可以使用我的方法來創建一個複雜的對象,裏面有數組列表。重要的是你必須註冊你的對象與Web服務的響應。這樣的事情:

public class PassengerVector extends Vector<Passenger> implements KvmSerializable {  

} 

envelope.addMapping(NAMESPACE, "Car", Car.class); 
envelope.addMapping(NAMESPACE, "Passenger", PassengerVector.class); 

但我不知道這種方式可以工作。對於像您的示例這樣的非常複雜的對象,我建議您應該按字段名稱逐個獲取數據,如the wiki

+0

非常感謝第三環節,它是非常有用的,現在我能夠繪製自定義對象。但是,在您提供的wiki頁面中,作者正在解析一系列自定義類,**在父元素中包裝**。有沒有一種方法可以像我的例子一樣使用內聯列表來實現這一點? – Krisprolls

+0

請檢查我的更新答案。在你的情況下,我認爲你應該嘗試從SoapObject獲取數據,而不是綁定數據。 – R4j

+0

您更新的答案非常感謝,謝謝。 – Krisprolls