Ksoap2在Android中不能序列 [英] Ksoap2 in android cannot serialize
本文介绍了Ksoap2在Android中不能序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我用ksoap2在机器人
发送号码列表作为字符串
但有错误:
java.lang.RuntimeException的不能序列
我寻找一个解决这个错误,但结果没有改变
可以帮我请
公共字符串发送(ArrayList中<字符串> contactlist)
{
尝试{
SoapObject请求=新SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
的PropertyInfo PI =新的PropertyInfo();
pi.setType(为String.class);
pi.setName(contactlist);
pi.setValue(contactlist);
request.addProperty(contactlist,PI);
。StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建();
StrictMode.setThreadPolicy(政策);
//创建SOAP信封
SoapSerializationEnvelope包=新SoapSerializationEnvelope(SoapEnvelope.VER11);
新MarshalBase64()寄存器(信封); //此行是为序列化
//可以评论说,行了,如果您的Web服务是不是.NET之一。
envelope.dotNet = TRUE;
envelope.setOutputSoapObject(要求);
AndroidHttpTransport androidHttpTransport =新AndroidHttpTransport(http://10.0.2.2:54869/Service1.asmx);
androidHttpTransport.debug = TRUE;
}
赶上(例外的例外)
{
返回exception.toString();
}
尝试
{
androidHttpTransport.call(SOAP_ACTION,包);
//字符串结果= envelope.getResponse()的toString();
返回; //结果;
}
赶上(例外的例外)
{
返回exception.toString();
}
解决方案
使用这个类序列化
公共类MarshalDouble实现元帅{
公共对象readInstance(XmlPullParser分析器,字符串命名空间,
字符串名称,预期的PropertyInfo)抛出IOException异常,
XmlPullParserException {
返回Double.parseDouble(parser.nextText());
}
公共无效寄存器(SoapSerializationEnvelope厘米){
cm.addMapping(cm.xsd,双,Double.class,这一点);
}
公共无效writeInstance(XmlSerializer的作家,对象OBJ)
抛出IOException异常{
writer.text(obj.toString());
}
}
添加此行包围
envelope.dotNet = TRUE;
envelope.implicitTypes = TRUE;
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
MarshalDouble MD =新MarshalDouble();
md.register(信封);
I use ksoap2 in android
to send list of numbers as string
But it have error:
java.lang.runtimeexception cannot serialize
I search a solution to this error but result not change
Can Help me please
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();
}
解决方案
Use this class for Serialization
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());
}
}
Add this line to envelop
envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
MarshalDouble md = new MarshalDouble();
md.register(envelope);
这篇关于Ksoap2在Android中不能序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文