【问题标题】:sendding byte[] into a KvmSerializable class将 byte[] 发送到 Serializable 类
【发布时间】:2013-07-27 08:13:27
【问题描述】:

如何在 android 上的 Ksoap2 中实现 KvmSerializable 的类中发送一个字节 [] 数组? 运行应用程序时出现以下错误:

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);
PropertyInfo pi = new PropertyInfo();
pi.setName("car");
pi.setValue(car);
pi.setType(car.getClass());
request.addProperty(pi);
env.setOutputSoapObject(request);
env.addMapping(NAMESPACE, "Car", car.getClass());

汽车类:

public class Car implements KvmSerializable{

    private byte[] bytes;

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

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

        }

         return null;
    }

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

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

                default:break;
        }

    }

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

        }

    }

}

谁能帮帮我?

谢谢

【问题讨论】:

  • 您需要在 Car 上安装 getBytes() 吗?您也可以粘贴堆栈跟踪吗?

标签: java android serialization bytearray ksoap2


【解决方案1】:

您应该为byte[] 类添加编组器映射。例如: env.addMapping(NAMESPACE, "Car", byte[].class, new MarshalBase64());

或者为您的类 Car 创建自定义编组器,它将写入此对象并将此编组器映射到 Car: env.addMapping(NAMESPACE, "Car", car.getClass(), new CustomMarshaller());

编辑:或者您可以手动将byte[] 编码为base64 字符串并从getProperty 返回String

【讨论】:

  • 非常感谢 esentsov 和 hack_on 的帮助,我使用了 env.addMapping(NAMESPACE, "Car", car.getClass(), new CustomMarshaller()) 行,现在我没有错误
  • 现在我还有一个问题,你能帮帮我吗?链接是:stackoverflow.com/questions/17927229/…
猜你喜欢
  • 2014-11-30
  • 2019-09-01
  • 2017-05-05
  • 1970-01-01
  • 2015-07-30
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
相关资源
最近更新 更多