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


убедитесь, что в приложении, которое вы тестируете, включены уведомления. Это была моя история, и поэтому тосты тоже не сработали. Я пошел искать прямой ответ, и так получилось, что тосты считаются частью уведомлений. Интересные вещи, понятия не имею.