java.lang.RuntimeException:无法序列化:0.0
我在asyncTask中发出soap请求,但遇到了如下奇怪错误java.lang.RuntimeException:无法序列化:0.0,java,android,ksoap2,Java,Android,Ksoap2,我在asyncTask中发出soap请求,但遇到了如下奇怪错误 04-18 13:51:25.070: E/AndroidRuntime(23482): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:658) 04-18 13:51:25.070: E/AndroidRuntime(23482): at com.mobilion.afa
04-18 13:51:25.070: E/AndroidRuntime(23482): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:658)
04-18 13:51:25.070: E/AndroidRuntime(23482): at com.mobilion.afad.RegisterDevice.getWebService(RegisterDevice.java:49)
04-18 13:51:25.070: E/AndroidRuntime(23482): at com.mobilion.afad.RegisterDevice.access$0(RegisterDevice.java:44)
04-18 13:51:25.070: E/AndroidRuntime(23482): at com.mobilion.afad.RegisterDevice$requestTask.doInBackground(RegisterDevice.java:109)
这些是我的方法
private boolean getWebService(String Method, SoapSerializationEnvelope SoapRequest)
{
HttpTransportSE httpTransport = new HttpTransportSE(SoapAddress);
try
{
httpTransport.call(Soapaction, SoapRequest);
//httpTransport.call(NameSpace + Method, SoapRequest);
return true;
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
catch (XmlPullParserException e)
{
e.printStackTrace();
return false;
}
}
及
下面是引发该异常的方法:
private void writeElement(XmlSerializer writer, Object element,
PropertyInfo type, Object marshal)
throws IOException {
if (marshal != null) {
((Marshal) marshal).writeInstance(writer, element);
} else if (element instanceof SoapObject) {
writeObjectBody(writer, (SoapObject) element);
} else if (element instanceof KvmSerializable) {
writeObjectBody(writer, (KvmSerializable) element);
} else if (element instanceof Vector) {
writeVectorBody(writer, (Vector) element, type.elementType);
} else {
throw new RuntimeException("Cannot serialize: " + element);
}
}
如您所见,当被序列化的元素
不是预期的类型时,就会抛出它。根据您得到的消息判断,实际对象很可能是浮点
或双精度
或大十进制
实例。我会仔细查看您输入到请求属性中的值
然而,有一点令人费解。根据stacktrace,您的
getWebService
方法直接调用writeElement
方法。然而,根据源代码,这是不可能的。你有没有。。。嗯。。。编辑堆栈跟踪?如果你想让别人对你的问题做出准确的诊断,那是个坏主意
private void writeElement(XmlSerializer writer, Object element,
PropertyInfo type, Object marshal)
throws IOException {
if (marshal != null) {
((Marshal) marshal).writeInstance(writer, element);
} else if (element instanceof SoapObject) {
writeObjectBody(writer, (SoapObject) element);
} else if (element instanceof KvmSerializable) {
writeObjectBody(writer, (KvmSerializable) element);
} else if (element instanceof Vector) {
writeVectorBody(writer, (Vector) element, type.elementType);
} else {
throw new RuntimeException("Cannot serialize: " + element);
}
}