使用KSOAP2 Android绑定嵌套的复杂对象

时间:2012-12-05 18:02:52

标签: ksoap2 android-ksoap2

我正在尝试使用kso​​ap2-android将来自WS的XML响应绑定到一组POJO的类。
互联网上的很多例子都对待非常简单的回复like this one
在我的情况下,我有很多自定义类,他们互相参考,有时甚至在arraylist中。

这是我正在尝试做的事情,我想约束这种反应:

<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;

}

如果可能的话,只修改POJO文件(简单的XML注释系统非常优雅,太糟糕了,在ksoap中没有相应的东西)。

我查看了KVMSerializable接口,但是当我尝试覆盖getPropertyInfo()方法时,我不知道应该在PropertyInfo.type中返回什么以及ksoap将如何处理ArrayLists。

我现在非常头疼,请帮帮我

2 个答案:

答案 0 :(得分:1)

请转到以下网址并阅读。 http://www.c-sharpcorner.com/UploadFile/88b6e5/how-to-call-web-service-in-android-using-soap/

由于 Ashok Parmar 牵引软件公司

答案 1 :(得分:0)

你应该从ksoap 2阅读the document,它们有很多有用的例子。
要获得复杂类型的数组,可以查看here
我用this approach来解析一个复杂的对象 如果所有这些都不起作用,则必须逐字段地从soap对象映射到pojo。
更新

  

非常感谢第3个链接,它非常有用,我现在能够   映射自定义对象。但是,在您提供的Wiki页面中,作者   正在解析包含在父元素中的自定义类数组。是   有一种方法可以使用像我的例子中的内联列表吗?

我之前从未尝试过,但我认为你可以将我的答案和维基结合起来。 首先,您可以尝试从wiki中的示例来实现您的乘客列表(extends Vector)。然后你可以使用我的方法创建一个内部有arraylist的复杂对象。重要的是您必须使用Web服务的响应注册您的对象。像这样:

 public class PassengerVector extends Vector<Passenger> implements KvmSerializable {    

 }

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

但我不确定这种方式是否有效。对于像您的示例这样的非常复杂的对象,我建议您应该按名称逐字段获取数据,如the wiki