1

AsyncTaskを使用してWebサービスを呼び出し、その応答を編集します。

私は自分のタスクを次のように呼びます。

new CallWebService().execute(et.getText().toString().trim());

ここで、etはユーザーが電話番号(String)を指定するEditTextです。したがって、文字列パラメーターをexecuteメソッドに渡します。

次に、AsyncTaskを拡張するCallWebServiceクラスで、指定された文字列を取得し、それをWebサービス呼び出しのパラメーターとして使用します。

private class CallWebService extends AsyncTask<String, Void, Object> 

doInBackroundメソッドのコード:

        @Override
    protected Object doInBackground(String... phone) {
        Object result = null;

        try {

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    // if i put "6949861372" manually at the second parametre it works!

            request.addProperty("phone", phone);
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            result = envelope.getResponse();
        } catch (Exception e) {
                    //do nothing
        }
        return result;
    }

「6949861372」を2番目のパラメータ((文字列)電話)に手動で配置すると、機能します!では、ここで何が問題になっていますか?では、editTextからdoInBackgroundメソッドに指定された番号を渡すにはどうすればよいですか?

わからない!!

4

2 に答える 2

2

次の方法でパラメータを取得できます。

String phoneNumber = phone[0];

メソッド内でdoInBackground()は、このphoneNumberを以下のようにパラメーターとして使用できます。

request.addProperty("phone", phoneNumber);
于 2012-08-30T12:12:43.510 に答える
1

tryブロック内のコードをdoInBackground()メソッドに配置する必要があります。ProgressDialogはonPreExecuteから表示されます。例外をキャッチしたら、publishProgress()を呼び出す必要があります。そして、onProgressUpdate()をオーバーライドします。Dialogを破棄し、そこにToastを表示するためのコードを配置します

于 2012-08-30T07:50:27.630 に答える