1

我使用 AsyncTask 调用 Web 服务并编辑其响应。

我这样称呼我的任务:

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

其中 et 是一个 EditText,用户在其中提供他的电话号码(字符串)。所以我将一个字符串参数传递给执行方法。

然后在扩展 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”,它会起作用!那么这里有什么问题?那么如何将给定的数字从 editText 传递给 doInBackground 方法?

我想不通!!

4

2 回答 2

2

您可以通过以下方式获取参数,

String phoneNumber = phone[0];

insidedoInBackground()方法,那么您可以使用此 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 回答