AsyncTask onPostExecute不输出

时间:2013-01-20 22:29:44

标签: android android-asynctask

我未在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永远不会显示。 (注意:这是ArrayAdapter.内部的内部类)我还添加了一个toast,看看我的ArrayList是否正确展开并将其放入{{1}但它从未显示过。

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

1 个答案:

答案 0 :(得分:2)

更改

protected void onPostExecute(Void v) {

所以它是

protected void onPostExecute(ArrayList<String> arr)

更改您的AsyncTask声明,使其

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

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