Размещение тоста сообщения из потока
-
25-09-2019 - |
Вопрос
Мое приложение запускает нить для запроса в Интернете для некоторых данных. Я хочу отобразить тост, когда ничего не найден, но мое приложение всегда вылетает.
Я пытался использовать контекст приложения из строки, как так:
Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();
Я также попробовал создать Runnable с тостом вызова и вызывая RunoNuithRead (Runnable) из потока (тост вызова в этом Runnable использует активность в качестве первого параметра).
У кого-нибудь есть какие-то идеи о том, как это достичь?
Решение
Попробуйте опубликовать внутрь к объекту обработчика.
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();
Другие советы
Toast.makeText().show()
Определенно нужно управлять на бите UI.
Вы, вероятно, должны использовать асинктюзную асинктюду, такие как Octavian Damiean, но вот какой-то код, использующий RONONUITHREAD, если вы устанавливаете на использование этого:
public void showToastFromBackground(final String message) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
});
}
Попробуйте внедрить класс расширения «обработчика» в классе активности и отправить ему сообщение из другого потока. Рекомендуется подробнее:
http://www.anddev.org/the_pizza_timer_-_threading-drawing_on_canvas-t126.html.
И, пожалуйста, когда задавать такой вопрос, включите след стека, который вы получаете.
Если вы управляете обработчиком из класса активности, вы можете установить контекст, просто ссылаясь на. Это вашей деятельности, как так:
final Runnable showToastMessage = new Runnable() {
public void run() {
Toast.makeText(YourActivity.this, "Message", Toast.LENGTH_SHORT).show();
}
};