Webサービスの呼び出しにKSOAP2を使用しました。これが私のコードです:
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(position: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
}