2011-05-24 88 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