2013-07-22 58 views
4

我正在使用Ksoap2從Android調用Web服務。我建的要求,但.CALL()方法拋出以下異常:Android KSoap2和陣列問題

07-22 11:12:57.718: W/System.err(9582): java.lang.NumberFormatException: Invalid int: "][2" 
07-22 11:12:57.728: W/System.err(9582):  at java.lang.Integer.invalidInt(Integer.java:138) 
07-22 11:12:57.728: W/System.err(9582):  at java.lang.Integer.parse(Integer.java:375) 
07-22 11:12:57.738: W/System.err(9582):  at java.lang.Integer.parseInt(Integer.java:366) 
07-22 11:12:57.738: W/System.err(9582):  at java.lang.Integer.parseInt(Integer.java:332) 
07-22 11:12:57.738: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.getIndex(SoapSerializationEnvelope.java:287) 
07-22 11:12:57.748: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.readVector(SoapSerializationEnvelope.java:304) 
07-22 11:12:57.758: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.readInstance(SoapSerializationEnvelope.java:446) 
07-22 11:12:57.758: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:387) 
07-22 11:12:57.768: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) 
07-22 11:12:57.768: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) 
07-22 11:12:57.788: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) 
07-22 11:12:57.788: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) 
07-22 11:12:57.798: W/System.err(9582):  at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:151) 
07-22 11:12:57.798: W/System.err(9582):  at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140) 
07-22 11:12:57.798: W/System.err(9582):  at org.ksoap2.transport.Transport.parseResponse(Transport.java:118) 
07-22 11:12:57.808: W/System.err(9582):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:253) 
07-22 11:12:57.808: W/System.err(9582):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116) 
07-22 11:12:57.808: W/System.err(9582):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111) 

如果我把完全相同的要求到了SoapUI,通話作品。

即使使用KSoap2,我得到響應,但這個錯誤似乎是在Ksoap2解析響應。

我相信這是導致錯誤的響應的該部分:

<data soapenc:arrayType="xsd:anyType[][2]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> 

Ksoap2被以爲] [2]被認爲是一個int [的anyType的[2]。

這是一個ksoap2中的錯誤?有沒有解決方法?

+0

u能張貼代碼 – KOTIOS

回答

0

07-22 11:12:57.738: W/System.err(9582): at org.ksoap2.serialization.SoapSerializationEnvelope.getIndex(SoapSerializationEnvelope.java:287)

從KSOAP V2.1.2的來源:這是SoapSerializationEnvelope.getIndex(字符串值,INT開始,INT DFLT)方法,它導致NumberFormatException

private int getIndex(String value, int start, int dflt) { 
    if (value == null) 
    return dflt; 

    return value.length() - start < 3 ? dflt : Integer.parseInt(value.substring(start + 1, value.length() - 1)); 
} 

而這正是SoapSerializationEnvelope .getIndex(字符串值,詮釋開始,詮釋DFLT)從V2.0.1方法:

private int getIndex(String value, int start, int dflt) { 
    if (value == null) 
    return dflt; 

    return value.length() - start < 3 
    ? dflt 
    : Integer.parseInt(value.substring(start + 1, value.length() - 1)); 
    } 

看看在http://sourceforge.net/p/kobjects/bugs/14/提交的bug報告。它和你的問題一樣。該錯誤報告提到了2.0.1版。而getIndex(String value, int start, int dflt)還沒有發佈2.0.1和2.1.2之間的變化。

另一份報告:Can't handle two dimensional arrays

+0

不是我想要的答案,但它看起來是正確的。 – Innova

1

我認爲這是在SOAPENC的第一方括號期待int值:arrayType中= 「XSD:anyType的[] [2]」

由於它沒有得到任何int值,所以有例外。