2013-04-18 43 views
0

我正在在的AsyncTask SOAP請求,但我遇到奇怪的錯誤,如了java.lang.RuntimeException:無法序列:0.0

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

回答

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方法直接調用。但是,根據不可能的源代碼。你有沒有......嗯......編輯堆棧跟蹤?這是一個糟糕的主意,如果你希望人們給你的問題一個準確的診斷。

相關問題