ご清聴ありがとうございました。
Android経由でWebサービスを呼び出すためにksoap2を使用する際に問題があります。
Webサービスを呼び出す関数があります。
public String CallWebServiceFunction()
{
String WSDL_TARGET_NAMESPACE = "http://MyWeb.com/";
String SOAP_ADDRESS = "http://MyWeb.com/pvws.asmx";
String SOAP_ACTION = "http://MyWeb.com/SoapAction";
String OPERATION_NAME = "SoapAction";
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
PropertyInfo prop1 = new PropertyInfo();
prop1.setName("prop1");
prop1.setValue("1");
request.addProperty(prop1);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
Object response=null;
try
{
httpTransport.call(SOAP_ACTION, envelope);
response = envelope.getResponse();
}
catch (Exception exception)
{
response=exception.toString();
}
return response.toString();
}
API 16 以上 (Android 4.x)を使用するエミュレーター (または実際のデバイス) を使用すると、すべて問題なく、関数は Web サービスから正しい応答を取得します。しかし、API 7 (Android 2.x) でエミュレーター (または実際のデバイス) を使用すると、例外が発生します。
「java.net.UnknownHostException: ホストが解決されていません: MyWeb.com:80」
どちらの場合も同じコードを使用して、次々と試してみましたが、異なる結果が得られました
誰かアイデアはありましたか?
UPD1 : 私のマニフェストの許可セクションは
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
UPD2 :仮説。最初に、targetSdkVersion=16 のアプリを作成しました。したがって、インターネット経由で Web サービスを呼び出すときは、マルチスレッド コードを使用します。たぶん、API7 で動作する場合、ソース コードはマルチスレッド化されるべきではありませんか?
UPD3 : 仮説が間違っていました。メインスレッドから webservice を呼び出すと、同じ例外が発生します。
しかし、別のコンピューターでプロジェクトを実行すると、正しく動作することに気付きました。私は同じコードを使用していますが。