我正在尝试使用ksoap2-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。
我现在非常头疼,请帮帮我
答案 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