Сообщения Android Toast не работают
Я разрабатываю игру через Andengine для Android. У меня есть класс MainActivity и класс GameScene. Я использую тост сообщения в GameActivity. И это работает.
Toast.makeText(this, " Hello World", Toast.LENGTH_SHORT).show();
Поэтому я хочу использовать тостовые сообщения в классе GameScene. Но это не работает. Вот код:
Toast.makeText(activity, " Hello World", Toast.LENGTH_SHORT).show();
Я должен использовать "активность" вместо "это". Но это не работает
Зачем?
Редакция:
когда я использую второй, возникает ошибка. LogCat: http://s29.postimg.org/k8faj9mdj/Capture.png
9 ответов
Вы пытаетесь отобразить Toast
в фоновом потоке. Вы должны выполнять все свои операции пользовательского интерфейса в основном потоке пользовательского интерфейса.
Исключение RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
может быть немного загадочным для начинающих, но, по сути, это говорит о том, что вы находитесь не в той теме.
Чтобы решить эту проблему, оберните тост, например: runOnUiThread()
:
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(...).show();
}
});
Используйте один из следующих
Toast.makeText(getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(),"please Create your Account First", Toast.LENGTH_SHORT).show();
Toast.makeText(GameActivity.this,"please Create your Account First", Toast.LENGTH_SHORT).show();
Может быть две причины, по которым ваш код не работает. Это эфир, ваш параметр активности равен нулю или...
Вскоре после того, как вы показываете тост, действие умирает, в этом случае оно также убьет тост, чтобы избежать этого, вы можете позвонить activity.getApplicationContext()
как в ответе @Mehmet Seçkin.
Использование:
Toast.makeText(getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
или же
Toast.makeText(activity.this, " Hello World", Toast.LENGTH_SHORT).show();
Убедитесь, что в тестируемом приложении включены уведомления. Это была моя история, и почему тосты тоже не работали. Я искал прямой ответ, и бывает, что тосты считаются частью уведомлений. Интересные вещи, я понятия не имел.
Так как вы спросили почему; Я думаю, что вы даете ссылку на активность в качестве контекста для сообщения Toast, поэтому оно не работает.
Если вы пытаетесь показать сообщение Toast за пределами действия, вы можете попробовать:
Toast.makeText(activity.getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
или из GameActivity
Toast.makeText(GameActivity.this, " Hello World", Toast.LENGTH_SHORT).show();
или из MainActivity
Toast.makeText(MainActivity.this, " Hello World", Toast.LENGTH_SHORT).show();
Если вы считаете, что ваш код правильный, попробуйте закрыть вкладку эмулятора, затем открыть диспетчер AVD, затем стереть данные и перезапустить. Или вы можете удалить текущий AVD и добавить новый.
Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();
попробуй это.
Так как ты звонишь из класса. вам нужно получить контекст из действия через конструктор класса, иначе вам нужно использовать GetApplicationcontext().