Сообщение о Toast из темы
Мое приложение запускает поток для запроса в Интернете для некоторых данных. Я хочу показать сообщение Toast, когда ничего не найдено, но мое приложение всегда сбой.
Я попытался использовать контекст приложения из потока, например:
Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();
Я также попытался создать Runnable с вызовом Toast и вызвать runOnUiThread (runnable) из Thread (вызов Toast в этой runnable использует Activity как первый параметр).
Есть ли у кого-нибудь идеи о том, как это сделать?
Ответы
Ответ 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();
}
};