Сообщения 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();
Я должен использовать "activity" вместо "this". Но это не работает
почему?
редактировать:
когда я использую второй, ошибка происходит. Чтение logcat: http://s29.postimg.org/k8faj9mdj/Capture.png
8 ответов
вы пытаетесь вывести 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();
}
});
может быть две причины, по которым ваш код не работает. Это эфир, ваш параметр активности равен null или...
короткое время после того, как вы показываете тост, активность умирает, в этом случае она также убьет тост, чтобы избежать этого, вы можете вызвать activity.getApplicationContext()
как в @Mehmet Seçkin ответ.
используйте одно из следующих
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();
использование:
Toast.makeText(getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();
или
Toast.makeText(activity.this, " Hello World", Toast.LENGTH_SHORT).show();
поскольку вы спросили, почему; я думаю, что вы даете ссылку на активность в качестве контекста сообщения тоста, вот почему он не работает.
если вы пытаетесь показать тост сообщение от за пределами деятельности, вы можете попробовать:
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();
Так как вы вызываете его из класса. вам нужно получить контекст из действия через конструктор класса, или вам нужно использовать GetApplicationcontext ().
убедитесь, что в приложении, которое вы тестируете, включены уведомления. Это была моя история, и поэтому тосты тоже не сработали. Я пошел искать прямой ответ, и так получилось, что тосты считаются частью уведомлений. Интересные вещи, понятия не имею.