Java 在AsyncTask Android应用程序的PostExecute方法中显示Toast消息

Java 在AsyncTask Android应用程序的PostExecute方法中显示Toast消息,java,android,listview,android-asynctask,Java,Android,Listview,Android Asynctask,好的,我有一个AsyncTask,它向列表视图添加项目。在执行前,我显示一条消息“开始”,在执行后,我显示“完成”。显示“开始”消息,但由于某些原因,当列表完成时,不显示“完成”消息。有人知道为什么该消息没有显示在该任务的PostExecute部分吗?多谢各位 代码: 类填充任务{ 公共场所(){ } 受保护的void onPreExecute(){ Toast.makeText(getApplicationContext(),“正在启动”, Toast.LENGTH_LONG).show();

好的,我有一个
AsyncTask
,它向
列表视图添加项目。在执行前,我显示一条消息“开始”,在执行后,我显示“完成”。显示“开始”消息,但由于某些原因,当列表完成时,不显示“完成”消息。有人知道为什么该消息没有显示在该任务的PostExecute部分吗?多谢各位

代码:

类填充任务{
公共场所(){
}
受保护的void onPreExecute(){
Toast.makeText(getApplicationContext(),“正在启动”,
Toast.LENGTH_LONG).show();
}
//在背景中解码图像。
@凌驾
受保护的Void doInBackground(整数…参数){
字符串结果=”;
InputStream isr=null;
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://myscript/“”;//您的
//PHP
//剧本
//地址
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
isr=entity.getContent();
//resultView.setText(“已连接”);
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
//将响应转换为字符串
试一试{
BufferedReader reader=新的BufferedReader(
新的InputStreamReader(isr,“iso-8859-1”),8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
isr.close();
结果=sb.toString();
}捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}
//解析json数据
试一试{
JSONArray jArray=新JSONArray(结果);
for(int i=0;i
您需要适当地实现onPostExecute

@Override
protected void onPostExecute(Void void){
      // Do what you want to do, for example, your toast:
      Toast.makeText(getApplicationContext(), "Done", Toast.LENGTH_LONG)
            .show();
}
-一般做法说明-

AsyncTask不需要构造函数,因此可以删除

public FillLocations(){
}
您应该声明类的可见性(除非您希望将其设置为默认可见性,即包),因此将其设置为

private class FillLocations extends AsyncTask<Integer, Void, Void>{
    // Your Stuff
}
私有类任务{
//你的东西
}

onPostExecute接受一个参数,如图所示

就个人而言,我会这样做,告诉用户出了问题,以防抛出异常。我从不喜欢让错误进入涅盘

protected String doInBackground(Integer... params) {
...
}


(另外,在文档中,没有使用
@Override

因为您没有正确地重写onPostExecute,所以它不会调用您所拥有的
onPostExecute()
无参数。还有,为什么要在doinbackground中使用runOnUiThread。应该在后台调用它thread@tyczj你能解释一下我怎样才能解决这个问题吗?添加
@Override
会产生错误查看文档以了解如何正确地重写它当我这样做时,我得到错误
MainActivity.FillLocations类型的onPostExecute()方法必须重写或实现一个超类型方法
@user1282637不知道如何根据代码帮助您克服此问题。可能希望对代码进行所述更改,但这对所述错误没有帮助(我不相信至少会有帮助)。我现在有另一个问题,当这个onPostExecute消息显示时,ListView项仍在显示…我的印象是,只有在doInBackground中的所有操作完成之后,才会发生onPostExecute,这是正确的吗?文档确实声明,它将在doInBackground完成后调用。毕竟,它将获得作为参数传递的doInBackground的返回值。如果取消doInBackground,则不会调用它。嗯,好吧,由于某种原因,在将每个项目添加到我的ListView(在doInBackground中完成)之前都会显示“完成”。是否多次启动异步任务?不,我所做的是FillLocations myFill=new FillLocations();然后是myFill.execute();一次
protected String doInBackground(Integer... params) {
...
}
protected void onPostExecute(String msg) {
    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG)
            .show();

}