Сообщения 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().

Другие вопросы по тегам