1

Webサービスを使用するAndroidアプリの簡単な例を実行しようとしています。Webでのいくつかの例に従って、私はついにこれを行いました。

private String getValueFromWS()
{
    try
    {
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        String weight = "3700";
        String fromUnit = "Grams";
        String toUnit = "Kilograms";

        PropertyInfo weightProp =new PropertyInfo();
        weightProp.setName("Weight");
        weightProp.setValue(weight);
        weightProp.setType(double.class);
        request.addProperty(weightProp);

        PropertyInfo fromProp =new PropertyInfo();
        fromProp.setName("FromUnit");
        fromProp.setValue(fromUnit);
        fromProp.setType(String.class);
        request.addProperty(fromProp);

        PropertyInfo toProp =new PropertyInfo();
        toProp.setName("ToUnit");
        toProp.setValue(toUnit);
        toProp.setType(String.class);
        request.addProperty(toProp);

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

        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapPrimitive response = (SoapPrimitive)envelope.getResponse();

        return response.toString();
    }
    catch (Exception e)
    {
        return "Error: " + e.getMessage();
    }
}

また、

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

マニフェストファイル内。

なぜ例外がスローされるのかわかりません

androidHttpTransport.call(SOAP_ACTION, envelope);

エミュレーターで実行する場合。2.5.8バージョンのkSoapを使用しており、エミュレーターはAndroid 4.1(レベル16)を実行しています。

私が間違っていることは何ですか?

4

1 に答える 1

2

返信が遅れて申し訳ありませんが、メインUIスレッドでネットワーク呼び出しを実行しているため、この例外が発生しています。AsyncTaskのdoInBackground()メソッドで呼び出しを実行して、メインスレッドから呼び出しをオフロードしてみてください。これを回避するもう1つの方法は、JellyBean(4.x)エミュレーターでデフォルトで有効になっている可能性のある厳密モードを変更することです。古いバージョンのsdk/emulator(2.3.x)でコードを試して、動作させることもできます。

これはエラーを説明します:

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

于 2012-07-26T15:38:10.890 に答える