2013-07-29 2 views
0

android에서 Ksoap2의 KvmSerializable을 구현하는 클래스 내에 java.util.List의 목록을 어떻게 보낼 수 있습니까? 나는 다음과 같은 오류가 응용 프로그램을 실행할 때 :List를 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()); 

Car 클래스 :

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을 구현하면 누구든지 나를 도울 수 있습니까?

감사

답변

1

ksoap2에 직렬화 클래스를 만드는 방법에는 여러 가지가 있습니다 :에 의해

  1. 는 구현이 클래스 마샬 객체를 생성하고
  2. 에 대한 addMapping 인터페이스 KvmSerializable
  3. SoapObject 및 직렬화 Vector은 태만.

이 조건과 일치하지 않으므로 오류가 발생합니다. 클래스 List에 대한 사용자 지정 마샬링 개체를 만들거나 List 인터페이스와 KvmSerializable을 구현하는 사용자 지정 클래스를 만들 수 있습니다. 또는 Vector을 사용하거나 addPropertyaddSoapObject을 호출하여 개체를 SoapObject로 변환 할 수도 있습니다.

+0

ksoap2 초보자입니다. 당신이 어떻게 말해야 할 지 모르겠고, 어떻게 할 수 있습니까? 또는이 정보가있는 웹 사이트의 링크를 써주시겠습니까? – Juliancho9191

+0

다음은 몇 가지 정보입니다 : [link] (https://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks). – esentsov

+0

오케이, 도와 주셔서 대단히 감사합니다. – Juliancho9191

관련 문제