我在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();
}
答案 0 :(得分: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);