Android AsyncTask未在PostExecute上执行

Android AsyncTask未在PostExecute上执行,android,android-activity,android-asynctask,Android,Android Activity,Android Asynctask,我正在处理一个AsyncTask,但在完成doInBackground后,PostExecute不会被调用 这是我的AsyncTask类 public class GetServerData extends AsyncTask<Object, String, String>{ Context con; ArrayList<Items> data; ListViewAdapter adapter; String IMAGE_PREFIX, cat_id; publi

我正在处理一个AsyncTask,但在完成doInBackground后,PostExecute不会被调用

这是我的AsyncTask类

  public class GetServerData extends AsyncTask<Object, String, String>{

Context con;
ArrayList<Items> data;
ListViewAdapter adapter;
String IMAGE_PREFIX, cat_id;

public GetServerData(Context con, ArrayList<Items> data, ListViewAdapter adapter, String cat_id){
    this.con = con;
    this.data = data;
    this.adapter = adapter;
    IMAGE_PREFIX =  con.getResources().getString(R.string.web_image_prefix);
    this.cat_id = cat_id;
}

@Override
protected String doInBackground(Object... arg0) {
    // TODO Auto-generated method stub
    String url = (String) arg0[0];


    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    List<NameValuePair> nameValuePairs = null;


    if (!(((Activity) con) instanceof MainActivity)){

        nameValuePairs = new ArrayList<NameValuePair>(3);
        nameValuePairs.add(new BasicNameValuePair("limit", (String) arg0[1]));
        nameValuePairs.add(new BasicNameValuePair("cat_id", cat_id));

    }else if (((Activity) con) instanceof MainActivity){
        nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("limit", (String) arg0[1]));
    }

    try {
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // Execute HTTP Post Request
    HttpResponse response = null;
        try {
            response = httpclient.execute(httppost);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }catch (Exception e){;
        }

    String result = null;

    HttpEntity entity = response.getEntity();
        try {
            result = EntityUtils.toString(entity);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return result;
}


@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    Toast.makeText(con, "Success", Toast.LENGTH_SHORT).show();
}
}

doInBackground方法运行得很好,并按其应该的方式获取数据。但我需要在onPostExecute中对数据进行后期处理。但是它没有被调用。我做错了什么?

您在doInbackground中显示toast消息,这违反了异步任务所有与ui相关的内容都应该在postExecute中显示

请把这些线移走

}catch (Exception e){
   Toast.makeText(con, "Unable to fetch data", Toast.LENGTH_SHORT).show();
}
最后一个catch块中的Toast.makeText正在引发异常。我认为这清楚地表明,您不应该试图从后台线程显示祝酒词


您应该能够在logcat中看到这个问题的堆栈跟踪。

这个问题以一种非常意外的方式解决了。重新启动eclipse修复了这个问题,因为我在eclipse中看到,eclipse没有正确地构建项目。

ots没有显示蟾蜍?把调试点放在那里我认为你在某些地方遇到了一些异常,因为你捕捉到了每个异常,所以应用程序没有崩溃。除了你的问题,不要显示来自doInBackground的toast消息。明白了,谢谢:)但仍然请在这个问题上提供任何帮助这是真的,我在评论中也指出了这一点,但如果没有抛出异常,这不可能是onPostExecute()未被执行的原因。但是问题仍然存在,onPostExecute仍然没有被调用。我调用了新的GetServerData(this,data,adapter,CPATH)Activity的方法What is current_limit,你是从主UI调用此任务吗?是的,我是从Activity的onCreate调用它。而current limit在这里只是一个字符串。我已经删除了代码中的所有祝酒词。但是异常不是问题,因为方法doInBackground成功执行,没有错误。但仍然是在PostExecute上我没接到电话。
}catch (Exception e){
   Toast.makeText(con, "Unable to fetch data", Toast.LENGTH_SHORT).show();
}