2013-07-26 2 views
0

어떻게 안드로이드에 Ksoap2에서 KvmSerializable을 구현하는 클래스 안에 바이트 [] 배열을 보낼 수 있습니까?. 나는 다음과 같은 오류가 응용 프로그램을 실행할 때 :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()); 

Car 클래스 :

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

자동차에서 getBytes()가 필요합니까? 또한 스택 추적을 붙여 넣을 수 있습니까? –

답변

1

당신은 클래스 byte[]에 대한 마샬과 매핑을 추가해야합니다. 예를 들면 : env.addMapping(NAMESPACE, "Car", byte[].class, new MarshalBase64());

또는이 객체를 작성하고 차량이 마샬지도 것이다, 클래스 Car에 대한 사용자 지정 마샬 러를 만듭니다 env.addMapping(NAMESPACE, "Car", car.getClass(), new CustomMarshaller());

편집 : 아니면 손과 반환으로 byte[] 문자열 base64에 인코딩 할 수 있습니다 String에서 getProperty.

+0

대단히 고맙습니다. esentsov 및 hack_on 도움을 받으 셨습니다. env.addMapping (NAMESPACE, "Car", car.getClass(), 새 CustomMarshaller())을 사용했습니다. 이제 오류가 없습니다. – Juliancho9191

+0

이제 다른 질문이 있습니다. 도와 주시겠습니까?, 링크는 다음과 같습니다. http://stackoverflow.com/questions/17927229/sendding-list-into-a-kvmserializable-class – Juliancho9191

관련 문제