【问题标题】:sendding List into a KvmSerializable class将 List 发送到 KvmSerializable 类
【发布时间】:2013-07-29 14:53:33
【问题描述】:

如何在 android 上的 Ksoap2 中实现 KvmSerializable 的类中发送 java.util.List 列表?运行应用程序时出现以下错误:

java.lang.RuntimeException: 无法序列化

我的代码是这样的:

SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);
env.dotNet = false;
env.xsd = SoapSerializationEnvelope.XSD;
env.enc = SoapSerializationEnvelope.ENC;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

Car car= new Car();
byte[] bytes = {1, 2, 3, 4, 5, 6, 7, 8, 9};
car.setBytes(bytes);
List<Door> list = new ArrayList<Door>();
car.setList(list);
PropertyInfo pi = new PropertyInfo();
pi.setName("car");
pi.setValue(car);
pi.setType(car.getClass());
request.addProperty(pi);
env.setOutputSoapObject(request);
env.addMapping(NAMESPACE, "Car", byte[].class, new MarshalBase64());

汽车类:

public class Car implements KvmSerializable{

    private byte[] bytes;
    private List<Door> list;

    public void setBytes(byte[] bytes) {
        this.bytes= bytes;
    }

    public void setList(List<Door> list) {
        this.list= list;
    }

    @Override
    public Object getProperty(int arg0) {
        switch(arg0){
            case 0:
                return bytes;
            case 1:
                return list;

        }

         return null;
    }

    @Override
    public int getPropertyCount() {
        // TODO Auto-generated method stub
        return 2
    }

    @Override
    public void getPropertyInfo(int ind, Hashtable ht, PropertyInfo info) {
        switch(ind){
                case 0:
                    info.type = MarshalBase64.BYTE_ARRAY_CLASS;
                    info.name = "bytes";
                    break;
                 case 1
                    info.type = List.class;
                    info.name = "list";
                    break;

                default:break;
        }

    }

    @Override
    public void setProperty(int ind, Object val) {
        switch(ind){
                case 0:
                    bytes = (byte[])val;
                    break;
                case 1:
                    list= (List<Door>)val;
                    break;

        }

    }

}

Door 类实现了 KvmSerializable,谁能帮帮我?

谢谢

【问题讨论】:

    标签: java android list serialization ksoap2


    【解决方案1】:

    有几种方法可以在 ksoap2 中使类可序列化:

    1. 为此类创建 marshall 对象并为其创建 addMapping
    2. 实现接口KvmSerializable
    3. SoapObjectVector 默认可序列化。

    List 与此条件中的任何一个都不匹配,因此您会收到错误消息。 您可以为类 List 创建自定义 marshall 对象或创建自定义类来实现 List 接口和 KvmSerializable。或者您可以使用Vector(或者甚至可以通过调用addPropertyaddSoapObject 将您的对象转换为SoapObject)。

    【讨论】:

    • 非常感谢,我是ksoap2的初学者,不知道怎么做你告诉我,你能告诉我怎么做吗?或者写一个有这个信息的网站的链接?
    • 这里有一些信息:link.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多