Java 将字节[]发送到KvmSerializable类中

Java 将字节[]发送到KvmSerializable类中,java,android,serialization,bytearray,ksoap2,Java,Android,Serialization,Bytearray,Ksoap2,如何在android上的Ksoap2中实现KVMSerizable的类内发送byte[]数组?。 在运行应用程序时,我遇到以下错误: java.lang.RuntimeException:无法序列化 我的代码是: SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11); env.dotNet = false; env.xsd = SoapSerializationEnvelope.XSD;

如何在android上的Ksoap2中实现KVMSerizable的类内发送byte[]数组?。 在运行应用程序时,我遇到以下错误:

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;

        }

    }

}
有人能帮我吗


谢谢

您应该为类
字节[]
添加marshaller映射。例如:
env.addMapping(名称空间,“Car”,字节[].class,新的MarshallBase64())

或者为类
Car
创建自定义封送拆收器,该类将编写此对象并将此封送拆收器映射到Car:
env.addMapping(名称空间,“Car”,Car.getClass(),new CustomMarshaller())


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

您需要在车上安装getBytes()?您还可以粘贴堆栈跟踪吗?非常感谢您的帮助esentsov和hack_on,我使用了行env.addMapping(名称空间,“Car”,Car.getClass(),new CustomMarshaller()),现在我没有错误。我还有一个问题,您能帮我吗?链接是: