如何将变量从Main Activity传递到AsyncTask及其方法?

时间:2012-08-30 07:42:51

标签: java android android-asynctask parameter-passing scope

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

我这样称呼我的任务:

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

其中et是一个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”放在第二个参数((String)手机上)它可以工作!那么这里有什么问题? 那么如何将给定的数字从editText传递给doInBackground方法呢?

我无法理解!!

2 个答案:

答案 0 :(得分:2)

您可以获取参数,

String phoneNumber = phone[0];

doInBackground()方法内,您可以使用此phoneNumber作为参数,如下所示

request.addProperty("phone", phoneNumber);

答案 1 :(得分:1)

您应该将try块中的代码放入doInBackground()方法中。应该从onPreExecute显示ProgressDialog。当你捕获异常时,你应该调用publishProgress()。并覆盖你的onProgressUpdate()。你把代码用于讨论Dialog并在那里显示Toast