Запустите AsyncTask в TimerTask

У меня есть таймер, который я хочу запустить AsyncTask, когда обратный отсчет завершен. Если я помещаю его выполнение в обработчик, он зацикливается и запускает его много раз. И если я не помещаю это в Обработчик, я получаю следующее падение: не может создать обработчик внутри потока, который не вызвал looper.prepare ()

<code>timer.schedule(new ListUpdate(), helper.nextListUpdate.get(0));

class ListUpdate extends TimerTask {
    private Handler mHandler = new Handler(Looper.getMainLooper());
    public void run() {
        mHandler.post(new Runnable() {
            public void run() {
                AsyncTask<Integer, Void, Boolean> task = new updateList();
                task.execute();
            }
        });
    }
}
</code>

Есть предложения, как мне это решить?

 just_user08 мая 2012 г., 12:55
Где бы я разместил твой ответ в моем коде?
 just_user08 мая 2012 г., 12:57
Да, но мне нужны предложения о том, как я могу это решить, а не о том, почему это происходит!
 Lalit Poptani08 мая 2012 г., 12:22
Проверьтеэто и работай
 Richa08 мая 2012 г., 12:26
Вы получили эту ошибку, потому что вы не можете обновить свой пользовательский интерфейс в Thread.u необходимо обновить пользовательский интерфейс из обработчика
 Lalit Poptani08 мая 2012 г., 13:01
Часть, которая обновляет интерфейс, должна быть помещена внутрьrunOnUiThread()

Ответы на вопрос(2)

AsyncTask должен работать только в потоке пользовательского интерфейса. В вашем случае кажется, что вы неправильно запускаете его в потоке пользовательского интерфейса.

Возможно, попробуй так:

timer.schedule(new ListUpdate(), helper.nextListUpdate.get(0));

class ListUpdate extends TimerTask {
    Looper looper = Looper.getMainLooper();
    looper.prepareMainLooper();

    private Handler mHandler = new Handler(looper);
    public void run() {
        mHandler.post(new Runnable() {
            public void run() {
                AsyncTask<Integer, Void, Boolean> task = new updateList();
                task.execute();
            }
        });
    }
}
 Caution Continues23 нояб. 2012 г., 11:47
Удивительный человек .................. Приятно :)) :))
 njzk223 нояб. 2012 г., 12:10
зачем использовать таймер для этого? У вас есть обработчик, используйте его!
 just_user08 мая 2012 г., 12:54
Это приводит к следующей ошибке. Но пока он наиболее близок к работе: только исходный поток, который создал иерархию представлений, может касаться его представлений.
 agentcurry15 мая 2012 г., 18:54
просто то, что я искал. работает отлично! Благодарность
 waqaslam08 мая 2012 г., 13:07
тогда я бы предложил тебе пропуститьlooper.prepareMainLooper(); и в Асинк DoInBackground метод, звониLooper.prepare(); Looper.loop(); и посмотри, работает ли это. Для получения дополнительной информации читайтеэт
Решение Вопроса

который я вызываю из TimerTask, я могу заставить его работать!

final Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        RelativeLayout rl_header = (RelativeLayout)findViewById(R.id.rl_header);
        Desktop desktop = helper.getDesktop();
        try {
            desktop.inflate(ll, rl_header, banners, DesktopApp.this);
            Collections.sort(helper.nextListUpdate);
            helper.nextListUpdate.remove(0);
            timer = new Timer();
            if (helper.nextListUpdate.size() > 0) timer.schedule(new ListUpdate(), helper.nextListUpdate.get(0));
        } catch (Exception e) {
            e.printStackTrace();
        }
     }

};

class ListUpdate extends TimerTask {
    public void run() {
        DesktopApp.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                handler.sendEmptyMessage(0);
            }
        });
    }
}
 Siddharth15 мар. 2013 г., 06:47
Они не знают, что doPost работает в потоке пользовательского интерфейса
 njzk223 нояб. 2012 г., 12:11
почему все продолжают использовать и таймер, и обработчики?

Ваш ответ на вопрос