0

我正在尝试使用 ksoap2-android 将来自 WS 的 XML 响应绑定到一组 POJO 类。
互联网上的许多示例都处理了像这样的非常简单的响应。
然而,就我而言,我有很多自定义类,它们保持相互引用,有时甚至在数组列表中。

这就是我想要做的,我想绑定这种响应:

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

我现在很头疼,请帮帮我

4

2 回答 2

1

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

感谢 Ashok Parmar Traction Software Co.

于 2012-12-10T10:06:48.390 回答
0

您应该阅读ksoap 2中的文档,其中有许多有用的示例。
要获取复杂类型的数组,您可以在此处查看
并且我已经使用这种方法来解析复杂对象。
如果它们都不起作用,您必须逐个字段从肥皂对象映射到您的 pojo。
更新

非常感谢第三个链接,它非常有用,我现在可以映射自定义对象。但是,在您提供的 wiki 页面中,作者正在解析一组自定义类,包装在父元素中。有没有办法像我的示例中那样使用内联列表来做到这一点?

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

 public class PassengerVector extends Vector<Passenger> implements KvmSerializable {    

 }

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

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

于 2012-12-06T16:44:53.387 回答