4

ご清聴ありがとうございました。

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 を呼び出すと、同じ例外が発生します。

しかし、別のコンピューターでプロジェクトを実行すると、正しく動作することに気付きました。私は同じコードを使用していますが。

4

3 に答える 3

0

データ接続を確認するか、Wi-Fi がオンになっていることを確認してください

次に、マニフェストに移動してインターネットを確認します

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
于 2016-04-21T05:30:29.690 に答える
0

Android 2.x が存在しないためだと思いますandroid.permission.READ_PHONE_STATE

それを試してみてください、

于 2013-09-13T10:56:33.983 に答える