8

我正在通过 Andengine for Android 开发游戏。我有 MainActivity 类和 GameScene 类。我在 GameActivity 中使用 Toast 消息。它正在工作。

Toast.makeText(this, " Hello World", Toast.LENGTH_SHORT).show();

所以我想在 GameScene 类中使用 Toast 消息。但它不起作用。这是代码:

Toast.makeText(activity, " Hello World", Toast.LENGTH_SHORT).show();

我必须使用“活动”而不是“这个”。但它不起作用

为什么?

编辑:

当我使用第二个时,会发生错误。日志猫:http : //s29.postimg.org/k8faj9mdj/Capture.png

4

9 回答 9

29

您正在尝试Toast在后台线程中显示 a 。您应该在主 UI 线程上执行所有 UI 操作。

对于初学者来说,这个例外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();
  }
});
于 2013-12-19T15:08:08.160 回答
1

使用以下之一

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();
于 2013-12-19T10:16:40.977 回答
1

您的代码无法正常工作可能有两个原因。您的活动参数为空或...

在您展示吐司后不久,活动就消失了,在这种情况下,它也会杀死吐司,为避免这种情况,您可以activity.getApplicationContext()像@Mehmet Seçkin 回答中那样调用。

于 2013-12-19T10:05:24.207 回答
0
Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();

尝试这个。

于 2013-12-19T10:00:27.167 回答
0

利用:

Toast.makeText(getApplicationContext(), " Hello World", Toast.LENGTH_SHORT).show();

或者

Toast.makeText(activity.this, " Hello World", Toast.LENGTH_SHORT).show();
于 2013-12-19T10:00:04.130 回答
0

既然你问为什么;我认为您将活动引用作为 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();
于 2013-12-19T10:02:22.313 回答
0

因为你是从课堂上调用它的。您需要通过类构造函数从活动中获取上下文,否则您需要使用 GetApplicationcontext()。

于 2013-12-19T10:20:28.797 回答
0

如果您认为您的代码是正确的,请尝试关闭您的模拟器选项卡,然后打开 AVD 管理器,然后擦除数据,然后重新启动。或者您可以删除当前的 AVD 并添加一个新的。

于 2021-09-16T07:39:28.113 回答
0

确保您正在测试的应用程序已打开通知。这就是我的故事以及为什么祝酒也不起作用。我一直在寻找一个直截了当的答案,碰巧祝酒被认为是通知的一部分。有趣的东西,我不知道。

于 2018-08-23T15:31:47.547 回答