我已将 KSOAP2 用于 Web 服务调用。这是我的代码:
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
HttpTransportSE aht = new HttpTransportSE(URL);
try {
aht.call(SOAP_ACTION, soapEnvelope);
SoapObject result;
try{
result = (SoapObject) soapEnvelope.getResponse();
}catch (ClassCastException e) {
result = (SoapObject)soapEnvelope.bodyIn;
}
// parse the SOAP object
} catch (Exception e) {
e.printStackTrace(); // here it is throwing XmlPullParserException in a #G network
}
当我们在我们的设备和网络中测试代码时,它运行良好。我已经在不同的位置以及不同的 Wifi 和 3g 网络中对其进行了测试。它工作正常。当我的客户使用他的设备和 Wifi 网络对其进行测试时,它也可以正常工作。但是当他尝试使用 3G 网络进行相同操作时,它正在给出XmlPullParserException
(预期:START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelopre(位置:START_TAG @1:6 in java.io.InputStreamReader)。这种网络特定的背后可能是什么问题SocketException
。
在这里我想提一下,在调用 SOAP 之前,我已经使用以下代码检查了网络状态:
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.getState() == NetworkInfo.State.CONNECTED
|| connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
// we are connected to a network
//go for SOAP call
}