Подтвердить что ты не робот

Сообщение о Toast из темы

Мое приложение запускает поток для запроса в Интернете для некоторых данных. Я хочу показать сообщение Toast, когда ничего не найдено, но мое приложение всегда сбой.

Я попытался использовать контекст приложения из потока, например:

Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();

Я также попытался создать Runnable с вызовом Toast и вызвать runOnUiThread (runnable) из Thread (вызов Toast в этой runnable использует Activity как первый параметр).

Есть ли у кого-нибудь идеи о том, как это сделать?

4b9b3361

Ответ 1

Попробуйте опубликовать внутри объекта Handler.

final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        Toast(this, message, duration).show();
    }

new Thread() {
    public void run() {
        mHandler.post(mUpdateResults);
    }
}.start();

Ответ 2

Toast.makeText().show() определенно необходимо запустить в потоке пользовательского интерфейса.

Вероятно, вы должны использовать AsyncTask, например, Octavian Damiean, но здесь используется некоторый код с использованием runOnUiThread, если вы настроили его на использование:

    public void showToastFromBackground(final String message) {
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            Toast.makeText(this, message, Toast.LENGTH_LONG).show();
        }
    });
}

Ответ 3

Попробуйте реализовать класс, расширяющий "Обработчик" в вашем классе Activity, и отправьте ему сообщение из другого потока. Здесь более подробно объясняется:

http://www.anddev.org/the_pizza_timer_-_threading-drawing_on_canvas-t126.html

И, пожалуйста, задавая такой вопрос, укажите трассировку стека, которую вы получаете.

Ответ 4

Если вы используете обработчик из класса Activity, вы можете установить контекст, просто ссылаясь на это действие следующим образом:

final Runnable showToastMessage = new Runnable() {
    public void run() {
        Toast.makeText(YourActivity.this, "Message", Toast.LENGTH_SHORT).show();
    }
};