0

我在 asyncTask 中提出了一个肥皂请求,但我收到了奇怪的错误,例如

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;
    }
}

protected Boolean doInBackground(String... params)
    {
        SoapSerializationEnvelope envelope = null;
        //Ayarlardan secimi enlemi boylamı al property olarak ekle
        SoapObject request = new SoapObject(NameSpace, "InsertUser");   

    //  if(Ayarlar.secim == 0){
            request.addProperty("deviceId", mDeviceId);
            request.addProperty("enlem","0");
            request.addProperty("boylam", "0");
            request.addProperty("depremMin", Ayarlar.mindeprem);
            request.addProperty("depremMax", "10");
            request.addProperty("mesafe", "0");
            request.addProperty("statu", "1");          
            request.addProperty("deviceType","2");  
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);              
    //  }
    /*  else if(Ayarlar.secim ==1){
            request.addProperty("deviceId", mDeviceId);
            request.addProperty("enlem",Ayarlar.Latitude);
            request.addProperty("boylam", Ayarlar.Longitude);
            request.addProperty("depremMin", Ayarlar.mindeprem);
            request.addProperty("depremMax", "10");
            request.addProperty("mesafe", Ayarlar.maxmesafe);
            request.addProperty("statu", "1");          
            request.addProperty("deviceType", "2"); 
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
        }       */  
        return getWebService("InsertUser", envelope);
    }
4

1 回答 1

0

这是引发该异常的方法:

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);
    }
}

如您所见,当element被序列化的不是预期类型之一时,它会被抛出。从您收到的消息来看,实际对象很可能是一个FloatDouble可能是BigDecimal实例。我会仔细查看您放入请求属性的值。


然而,有一点令人费解。根据堆栈跟踪,该writeElement方法是由您的方法直接调用的getWebService。但是,根据源代码那是不可能的。你……嗯……编辑了堆栈跟踪吗?如果您希望人们对您的问题做出准确的诊断,那是个坏主意。

于 2013-04-18T11:18:15.627 回答