2013-07-29 4 views
0

как я могу отправить список java.util.List внутри класса, который реализует KvmSerializable в Ksoap2 на android ?. при запуске приложения, я получаю следующее сообщение об ошибке:отправка списка в класс 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); 
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; 

     } 

    } 

} 

класс двери реализует KvmSerializable, любой может мне помочь?

благодаря

ответ

1

Есть несколько способов сделать класс сериализации в ksoap2:

  1. Создать объект Маршалловых для этого класса и addMapping для него
  2. Реализация интерфейса KvmSerializable
  3. SoapObject и Vector сериализации по по умолчанию.

List не соответствует ни одному из этих условий, поэтому вы получаете сообщение об ошибке. Вы можете создать собственный объект marshall для класса List или создать собственный класс, который бы реализовал интерфейс List и KvmSerializable. Или вы можете использовать Vector (или можете даже преобразовать свой объект в SoapObject, вызвав addProperty и addSoapObject).

+0

большое спасибо, я новичок в ksoap2, и я не знаю, как это сделать, скажите мне, не могли бы вы сказать мне, как это сделать ?, или написать ссылку на веб-сайт, на котором есть эта информация? – Juliancho9191

+0

Вот некоторая информация: [link] (https://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks). – esentsov

+0

ОК, большое спасибо за вашу помощь, ты спас меня – Juliancho9191