2

Android アプリから asmx Web サービスを呼び出そうとしています。今日、文字通り Android 開発を開始しました。ネットやここで見つけたさまざまな解決策に従っていますが、予想よりも難しいようです。私はさまざまなソリューションを試しましたが、KSoap2 を使用するのがこれを実装する最も簡単な方法のようです。

ある時点まで機能する次のコードがあります。

private class CallWebService extends AsyncTask<Void, Void, Void> {

    private static final String SOAP_ACTION = "http://tempuri.org/GetUser";
    private static final String METHOD_NAME = "GetUser";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String URL = "http://160.10.1.79:59315/Service1.asmx";
    TextView tv;

    @Override
    protected Void doInBackground(Void... params) {
        tv=(TextView)findViewById(R.id.txtMessage);

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

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

            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

            androidHttpTransport.call(SOAP_ACTION, envelope);

            Object result = (Object)envelope.getResponse();

            tv.setText(result.toString());
        }
        catch (Exception e) {
            tv.setText(e.getMessage());
        }
        return null;
    }
}

線にぶら下がっているようandroidHttpTransport.call(SOAP_ACTION, envelope);です 理由はありますか?これは正しいアプローチですか?別の方向を見るべきですか?

4

2 に答える 2

1
 tv.setText(result.toString());

から UI にアクセスすることはまったく推奨されませんdoInBackground

doInBackground結果が自動的に渡さonPostExecuteれ、そこにテキストを設定できます

protected void onPostExecute(String result){
   tv.setText(result.toString());
}
于 2012-12-10T17:01:59.673 に答える
1

これに対する解決策は、最終的には非常に簡単でした。Web サービスは localhost で実行されていましたが、localhost:59315. だから私はそれをに変更しました**MY IP**:59315。それでもうまくいきませんでした。この質問Accessing localhost:port from Android emulatorを使用して試してみ10.0.2.2:59315ましたが、うまくいきました。他の質問で Akhil Jain に感謝します。

于 2012-12-11T10:05:23.137 に答える