2013-09-22 27 views
0

我使用的AndroidKsoap2 android系統中不能序列

ksoap2發送號碼列表作爲字符串

但它有錯誤:

了java.lang.RuntimeException不能序列

我搜索解決此錯誤但結果不會變化

可以幫我請

public String Send(ArrayList<String> contactlist) 
{ 
    try{ 
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME); 
PropertyInfo pi=new PropertyInfo(); 
      pi.setType(String.class); 
      pi.setName("contactlist"); 
      pi.setValue(contactlist); 
      request.addProperty("contactlist", pi); 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     // Creating SOAP envelope   
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     new MarshalBase64().register(envelope); // this line is for serialization 

     //You can comment that line if your web service is not .NET one. 
     envelope.dotNet = true; 

     envelope.setOutputSoapObject(request); 
     AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport("http://10.0.2.2:54869/Service1.asmx"); 
     androidHttpTransport.debug = true; 
} 
    catch (Exception exception) 
     { 
      return exception.toString(); 
     } 
    try 
     { 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      //String result = envelope.getResponse().toString(); 
      return "";//result; 
     } 
    catch (Exception exception) 
     { 
      return exception.toString(); 
     } 

回答

4

使用這個類的序列化

public class MarshalDouble implements Marshal { 
     public Object readInstance(XmlPullParser parser, String namespace, 
       String name, PropertyInfo expected) throws IOException, 
       XmlPullParserException { 

      return Double.parseDouble(parser.nextText()); 
     } 

     public void register(SoapSerializationEnvelope cm) { 
      cm.addMapping(cm.xsd, "double", Double.class, this); 

     } 

     public void writeInstance(XmlSerializer writer, Object obj) 
       throws IOException { 
      writer.text(obj.toString()); 
     } 
    } 

加入這行來包圍

envelope.dotNet = true; 
    envelope.implicitTypes = true; 
    envelope.encodingStyle = SoapSerializationEnvelope.XSD; 
    MarshalDouble md = new MarshalDouble(); 
    md.register(envelope); 
+0

你好艾米特,你能不能讓我知道如何自定義發送對象,而不是雙? –

+0

謝謝。你能解釋一下嗎?它如何工作並擴展自定義對象? –