0

我没有达到onPostExecute一个AsyncTask班级。

onClick我在对话框中以这种方式调用任务:

new HelpfulTask().execute(passing);

注意:当我将鼠标悬停在上面的代码上时,我会收到一条警告:

为 varargs 参数创建了一个 ArrayList 的通用数组。

我不确定这意味着什么,如果这会阻止我的任务甚至运行?

这是任务代码:

protected class UnHelpfulTask extends
            AsyncTask<ArrayList<String>, Void, ArrayList<String>> {

        ArrayList<String> passed;

        protected ArrayList<String> doInBackground(ArrayList<String>... passing) {
            passed = passing[0];

            String url_select = "http://www.---.com/---/bad.php";

            ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
            param.add(new BasicNameValuePair("item", passed.get(0)));
            param.add(new BasicNameValuePair("text", passed.get(1)));
            param.add(new BasicNameValuePair("category", passed.get(2)));

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url_select);

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(param));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                // read content
                is = httpEntity.getContent();

            } catch (Exception e) {

                Log.e("log_tag", "Error in http connection " + e.toString());
            }

            return null;
        }

        InputStream is = null;
        String result = "";

        protected void onPostExecute(Void v) {


            Toast.makeText(getContext(), "You have voted this down!",
                    Toast.LENGTH_SHORT).show();

        }

    }

我在运行时没有收到任何错误,在 中onPostExecute,Toast 从不显示。 (注意:这是 an 内部的一个内部类ArrayAdapter. 我还添加了一个 toast 以查看我ArrayList是否正确展开并将其放入,onPostExecute但它也从未显示。

如何测试以查看此任务是否正在运行?

4

1 回答 1

2

改变

protected void onPostExecute(Void v) {

所以它是

protected void onPostExecute(ArrayList<String> arr)

更改您的 AsyncTask 声明,使其

extends AsyncTask<ArrayList<String>, Void, Void>

null自从你回来后,这是一个更好的主意doInBackground()。您没有得到祝酒词的原因是因为您使用的方法与 AsyncTask 指定的方法不同。这就是我们通常使用@Override注释的原因 - 它强制检查实际覆盖,您需要在 AsyncTasks 等类中执行此操作。

于 2013-01-20T22:32:54.473 回答