【发布时间】:2014-08-05 17:51:39
【问题描述】:
这是我第一次使用 AsyncTask,所以如果错误非常愚蠢,我会道歉......
这是我的课:
class HttpAsyncTask extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... urls)
{
return null;
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result)
{
Log.i("ASYNC", "size: "+todo.size());
displayListView();
}
public String POST(String url)
{
InputStream inputStream = null;
String result = "";
try
{
HttpClient httpclient = new DefaultHttpClient();
//make POST request to the given URL
HttpPost httpPost = new HttpPost(url);
// pass parameters in this way
for(int i=0;i<preguntas.length;i++)
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id",String.valueOf(preguntas[i])));
nameValuePairs.add(new BasicNameValuePair("te",tablas[i]));
//add data
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// 8. Execute POST request to the given URL
HttpResponse httpResponse = httpclient.execute(httpPost);
// 9. receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// 10. convert inputstream to string
if(inputStream != null)
{
result = convertInputStreamToString(inputStream);
NumPregTem todoAux = new NumPregTem();
todoAux.setBBDD(preguntas[i]) ;
todoAux.setTema(tablas[i]);
String[] aux = result.split(";");
todoAux.setPreg(aux[0]);
todoAux.setRespA(aux[1]);
todoAux.setRespB(aux[2]);
todoAux.setRespC(aux[3]);
todoAux.setRespD(aux[4]);
todoAux.setRespV(aux[5]);
todo.add(todoAux);
}
else
{
result = "Did not work!";
}
}
Log.i("ASYNC", "i've finished to query");
}
catch (Exception e)
{
Log.d("InputStream", e.getLocalizedMessage());
}
return result;
}
}
我的问题是在调试器中我看到消息 Log.i("ASYNC", "size: "+todo.size());在消息 Log.i("ASYNC", "i've finished to query"); 之前的 onPostExecute() 中在 POST 中,当我在主类(调用 displayListView() )中使用 todo.get(i) 时,此对象为空。
谢谢!
我想在异步任务完成时调用 displayListView()
PD:我在这个函数中调用 POST(在我的主类中)
HttpAsyncTask httpAsyncTask = new HttpAsyncTask();
httpAsyncTask.execute("http://appdomain.hol.es/webService.php");
【问题讨论】:
-
我没有看到你的 POST 方法在任何地方被调用
-
我已经编辑了 posthttpAsyncTask.execute,在我的主类中你调用了调用的函数,当异步任务完成后你想调用 displayLstView()
-
您正在做的是将参数传递给您的任务。您的 POST() 方法仍未被调用。查看答案。你的任务实际上并没有做任何事情
-
谢谢,@SimonSays 的回答是对的
-
@Droidman 很抱歉提出这个问题作为评论,您是否可以使用一些链接,例如在 AsyncTask 运行时放置一个显示下载状态的栏?该栏进入 POST 方法?