2011-05-24 2 views
3

Привет Я загружаю Tweets из учетной записи пользователя, чтобы показывать ее в виде списка. Теперь я хочу, чтобы пользователи знали, что происходит, пока они ждут. Я реализовал Async Task, но по какой-то причине onPostExcecute никогда не вызывается. Вот почему диалог никогда не удаляется.Async Task Progress Dialog не уходит

Может кто-нибудь дать мне подсказку. Что я делаю неправильно?

я могу разместить свои 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; 
} 

EDIT: Я добавил свои LoadTweets() в моем doInBackgroundMethod и это решило мои проблемы!

+0

Что ваш loadTweets) метод выглядеть (как? –

+0

@ nicholas.hauschild Я добавил код – Hannelore

ответ

0

Try объявляя ProgressDialog dialog в главном классе, в котором ваш класс AsyncTask существует и только называет dialog.show и dialog.dismiss метода в классе AsyncTask.

+0

Я сделал это и инициализировал диалог в 'onCreate()' методе, но это не помогло, к сожалению – Hannelore

0

Использование onCreateDialog(int id) в деятельности по созданию ProgressDialog. В AsyncTask вызова:

MainActivity.this.showDialog(PROGRESS_DIALOG_ID); 

Уволить:

MainActivity.this.dismissDialog(PROGRESS_DIALOG_ID); 

Диалоги связаны с контекстом на данный вид деятельности. Когда активность воссоздается, диалог также должен быть воссоздан, но затем экземпляр диалога не совпадает.

0

onPostExecute() не соответствует декларации Void. Я нахожусь на дороге, так что с верхней части моей головы считают:

protected void onPostExecute(Void result) 

Более here.

+0

Я пробовал это, но это не сработало, к сожалению. Что именно неправильно с декларацией.За исключением изменения 'arg0' в' args', я не вижу никакой разницы. – Hannelore

+0

@ Ханнелор Я нахожусь в дороге, поэтому я не смог проверить свой код. Я отредактировал свой ответ. – JAL

0

У меня были те же проблемы, и да это случилось со мной, когда onPostExecute не соответствует декларации ... попробовать что-то вроде protected Void onPostExecute(Void... arg0)

Следующее, что нужно сделать, это поместить Log.d («Ваше приложение», «Местоположение этого кода»); и проверьте, какая часть не выполняется на лог-файл ...

Надежда и будет найти решение ...

0

Хм, две вещи, которые приходят на ум здесь ..

1) Почему ваш onPostExecute не переопределяется, как onPreExecute и doInBackground?

2) Почему doInBackground после выполнения onPost? Как правило, заказ

onPreExecute doInBackground onPostExecute

+0

Я знаю, что этот комментарий старый, но просто чтобы вы знали, что в Java нотация '@ Override' является необязательной. –