2

我正在使用 ksoap2 2.5.4 版从基于cordova的android应用程序向服务器发送soap请求。这在使用我们的测试设备的 wifi 连接时效果很好,但在使用 3g 连接时会失败。

测试的设备是 Nexus 7

我已经广泛搜索了这个问题,但还没有找到解决方案。

使用 wifi 连接时,响应看起来不错,但每当我切换到使用 3g 时,我都会收到以下错误:

 org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT jsoapenv:Env...@1:248 in java.io.InputStreamReader@4164ce20) 
    at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
    at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
    at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:2029)
    at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)
    at org.ksoap2.transport.Transport.parseResponse(Transport.java:90)
    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:179)
    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:90)
    at se.icecon.poc.SOAPRequest.login(SOAPRequest.java:119)
    at se.icecon.poc.SOAPRequest.execute(SOAPRequest.java:37)
    at org.apache.cordova.api.Plugin$1.run(Plugin.java:78)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:856)

这是我的请求代码。

private String login (String username, String password) {
    SoapObject request = new SoapObject(NAMESPACE, "LoginRequestMessage");
    request.addProperty("username", username);
    request.addProperty("password", password);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);

    HttpTransportSE ht = new HttpTransportSE(URL);
    ht.debug = true;
    try {
        ht.call(SOAP_ACTION, envelope);
        return ht.responseDump;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

似乎当使用 3g 时,一些字节被添加到响应中并有所移动,因此以某种方式破坏了请求中的其余数据。

我目前的猜测是它与类似,但我只是得到了一些剩余的字符,它们以某种方式把其余的弄乱了。

提前感谢任何可能将其推向正确方向的提示。

4

0 回答 0