Android中的Toast消息无法正常工作

8

我正在使用Andengine开发一个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();

我必须使用 "activity" 替代 "this",但它不起作用。

为什么?

编辑过:当我使用第二个之后,出现错误。 LogCat: http://s29.postimg.org/k8faj9mdj/Capture.png


3
你尝试使用 activity.getApplicationContext() 了吗? - mehmetseckin
你在做什么活动? - A.S.
2
请使用 YourActivity.this - Jagadesh Seeram
9个回答

30
你正在尝试在后台线程中显示一个 Toast。你应该将所有 UI 操作放在主 UI 线程上。
对于初学者来说,异常 RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 可能有点难以理解,但基本上它告诉你你在错误的线程中。
要解决这个问题,可以将 Toast 包装在 runOnUiThread() 中。
activity.runOnUiThread(new Runnable() {
  @Override
  public void run() {
    Toast.makeText(...).show();
  }
});

1
我应该放置这个活动吗?还是我应该写 this.runOnUiThread() ?@laalto - gumuruh

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();

1

你的代码无法运行可能有两个原因。要么是你的活动参数为空,要么是...

在你显示toast后不久,活动就会结束,这种情况下它也会关闭toast,为了避免这种情况,你可以像@Mehmet Seçkin的答案中那样调用activity.getApplicationContext()


0
Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();

试一下这个。


0

使用:

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

或者

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

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();

0

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


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

0

确保您正在测试的应用程序已打开通知。这就是我的故事,也是为什么烤面包片也不起作用的原因。我一直在寻找一个明确的答案,结果发现烤面包片被认为是通知的一部分。有趣的事情,我一点都不知道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接