异步任务进度对话框不会消失

问题描述

你好 我正在从用户帐户加载推文以显示在列表视图中。现在,我想让用户知道他们正在等待的过程。我已经实现了异步任务,但是由于某种原因,从未调用过onPostExcecute。这就是为什么对话框永远不会被删除的原因。 有人可以给我一个提示吗。我在做什么错? 如果需要,我可以发布我的TweetAdapterClass 这是我的Asyncclass
public class Progresstask extends AsyncTask<Void,Void,Void> {


    @Override
    protected void onPreExecute() {
        dialog.setTitle(\"Even geduld...\");
        dialog.setMessage(\"De tweets worden ingeladen...\");
        dialog.show();
    }

    protected void onPostExecute() {
        try {
            if (dialog.isShowing()) {
                adaptor = new TweetListAdaptor(MainActivity.this,R.layout.tweetitem,loadTweets());
                setlistadapter(adaptor);
                dialog.dismiss();
            }
        } catch (Exception e) {
        }
    }

    @Override
    protected Void doInBackground(Void... arg0) {

        return null;

    }
}
LoadTweets看起来像这样:
private ArrayList<Tweets> loadTweets() {
    ArrayList<Tweets> tweets = new ArrayList<Tweets>();
    try {
        HttpClient hc = new DefaultHttpClient();
        HttpGet get = new HttpGet(
                \"http://search.twitter.com/search.json?q=JobXXL_be&rpp=10\");
        // HttpGet get = new
        // HttpGet(\"http://search.twitter.com/search.json?q=Stijn_messiaen&rp=10\");

        HttpResponse rp = hc.execute(get);
        if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            String result = EntityUtils.toString(rp.getEntity());
            JSONObject root = new JSONObject(result);
            JSONArray sessions = root.getJSONArray(\"results\");
            for (int i = 0; i < sessions.length(); i++) {
                JSONObject session = sessions.getJSONObject(i);
                Tweets tweet = new Tweets();
                tweet.setTweet(session.getString(\"text\"));
                tweet.setUser(session.getString(\"from_user\"));
                // datum vertalen
                String date = session.getString(\"created_at\").substring(5,16);
                String[] arrDate = date.split(\" \");
                int id = this.getResources().getIdentifier(
                        arrDate[1].toString(),\"string\",this.getPackageName());
                String maand = getResources().getString(id);
                date = arrDate[0].toString() + \" \" + maand + \" \"
                        + arrDate[2].toString();

                tweet.setDate(date);
                tweets.add(tweet);
            }
        }
    } catch (Exception e) {
        Log.e(\"TwitterFeedActivity\",\"Error loading JSON\",e);
    }
    return tweets;
}
编辑:我在我的
doInBackgroundMethod
添加了我的LoadTweets(),这解决了我的问题!     

解决方法

尝试在您的AsyncTask类所在的主类中声明
ProgressDialog dialog
,并且仅在AsyncTask类中调用
dialog.show
dialog.dismiss
方法。     ,在活动中使用
onCreateDialog(int id)
创建
ProgressDialog
。在AsyncTask调用中:
MainActivity.this.showDialog(PROGRESS_DIALOG_ID);
取消:
MainActivity.this.dismissDialog(PROGRESS_DIALOG_ID);
对话框与活动的上下文关联。重新创建活动时,也应该重新创建对话框,但是对话框的实例不相同。     ,我遇到了同样的问题,是的,当onPostExecute与声明不匹配时,这发生在我身上……尝试类似
protected Void onPostExecute(Void... arg0)
接下来要做的是放置Log.d(\“您的应用程序\”,\“此代码的位置\”);并检查哪个部分不在日志文件上执行... 希望你能找到解决方案...     ,onPostExecute()与声明Void不匹配。我在旅途中,因此不在我的脑海中思考:
protected void onPostExecute(Void result)
这里更多。     ,嗯,这里有两件事要引起我的注意。 1)为什么不像onPreExecute和doInBackground那样覆盖onPostExecute? 2)为什么在onPost执行后doInBackground?一般来说,顺序是 onPreExecute doInBackground onPostExecute