2011-05-24 55 views
3

您好 我加载鸣叫从用户帐户列表视图显示。现在我想让用户知道他们在等待的过程中发生了什么。我已经实现了异步任务,但由于某种原因,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; 
} 

编辑:我将我的LoadTweets()在我的doInBackgroundMethod这解决了我的问题!

+0

什么是您的loadTweets()方法是什么样子? – 2011-05-24 12:36:17

+0

@ nicholas.hauschild我已经添加了代码 – Hannelore 2011-05-24 12:40:45

回答

0

尝试在您的AsyncTask类存在的主类中声明ProgressDialog dialog,并且只调用AsyncTask类中的dialog.showdialog.dismiss方法。

+0

我这样做,并在'onCreate()'方法初始化对话框,但它并没有帮助不幸的 – Hannelore 2011-05-24 13:21:40

0

使用onCreateDialog(int id)在活动创造ProgressDialog。在通话的AsyncTask:

MainActivity.this.showDialog(PROGRESS_DIALOG_ID); 

要消除:

MainActivity.this.dismissDialog(PROGRESS_DIALOG_ID); 

对话框与活动的上下文连接。当活动被重新创建时,对话框也应该被重新创建,但是对话框的实例并不相同。

0

onPostExecute()不匹配声明作废。我在路上等客我的头顶考虑:

protected void onPostExecute(Void result) 

更多here.

+0

我试过这个,但不幸的是它不工作。声明有什么错误。除arg0在'args'中改变外,我没有看到任何区别。 – Hannelore 2011-05-25 06:31:53

+0

@Hannelore我在路上,所以我无法测试我的代码。我编辑了我的答案。 – JAL 2011-05-25 22:02:19

0

我有同样的问题,是啊,这发生在我身上的时候onPostExecute不匹配的声明...尝试像protected Void onPostExecute(Void... arg0)

接下来要做的就是把Log.d(“你的应用”,“位置。此代码”);并检查哪个部分没有在日志文件执行...

希望你会找到解决办法......

0

嗯,有两两件事我想到这里..

1)为什么是你onPostExecute不会像onPreExecute和doInBackground一样被覆盖?

2)为什么onPost执行后的doInBackground?一般的顺序是

onPreExecute doInBackground onPostExecute

+0

我知道这个评论是旧的,但只是为了让你知道,在Java中,“@ Override”符号是可选的。 – 2014-01-29 16:52:05