Диалог выполнения асинхронной задачи не исчезает - PullRequest
3 голосов
/ 24 мая 2011

Здравствуйте, я загружаю твиты из учетной записи пользователя, чтобы показать их в виде списка.Теперь я хочу, чтобы пользователи знали, что происходит, пока они ждут.Я реализовал Async Task, но по какой-то причине 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, и это решило мои проблемы!

Ответы [ 5 ]

0 голосов
/ 04 декабря 2012

Хм, тут на ум приходят две вещи ..

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

2) Почему doInBackground после onPost выполняется? Обычно заказ составляет

onPreExecute doInBackground onPostExecute

0 голосов
/ 25 мая 2011

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

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

Надеюсь, вы найдете решение ...

0 голосов
/ 24 мая 2011

Используйте onCreateDialog(int id) в действии, чтобы создать ProgressDialog. В AsyncTask позвоните:

MainActivity.this.showDialog(PROGRESS_DIALOG_ID);

Уволить:

MainActivity.this.dismissDialog(PROGRESS_DIALOG_ID);

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

0 голосов
/ 24 мая 2011

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

protected void onPostExecute(Void result)

Подробнее здесь

0 голосов
/ 24 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...