如何在一个实现KvapSerializable的类中发送一个byte []数组在Android上的Ksoap2中? 运行应用程序时,我收到以下错误:
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;
}
}
}
任何人都可以帮助我吗?
感谢
答案 0 :(得分:1)
您应该为类byte[]
添加marshaller映射。例如:
env.addMapping(NAMESPACE, "Car", byte[].class, new MarshalBase64());
或者为您的班级Car
创建自定义编组,编写此对象并将此编组映射到Car:
env.addMapping(NAMESPACE, "Car", car.getClass(), new CustomMarshaller());
修改:或者您可以手动将byte[]
编码为base64
字符串,并从String
返回getProperty
。