我未在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}但它从未显示过。
如何测试此任务是否正在运行?
答案 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等类中执行这些覆盖。