2013-12-19 55 views
6

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

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

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

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

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

为什么?

EDITED:

当我使用第二个,会产生错误。 logcat的: http://s29.postimg.org/k8faj9mdj/Capture.png

+3

您是否尝试过使用_activity.getApplicationContext()_? –

+0

你的活动是什么? –

+1

使用** YourActivity.this ** –

回答

21

您正试图在后台线程中显示Toast。您应该在主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(); 
    } 
}); 
+1

我应该把这项活动?或者我应该写这个.runOnUiThread()? @laalto – gumuruh

0

用途:

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

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

尝试。

0

既然你问为什么;我认为你将一个活动引用作为Toa​​st消息的上下文,这就是为什么它不起作用。

如果你想显示从外活动的敬酒消息,你可以尝试:

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

There c应该是你的代码无法工作的两个原因。这是乙醚您的活动参数为空或...

短时间后,你显示吐司的活动是死,在这种情况下,它也会杀死吐司,以避免这种情况,你可以打电话activity.getApplicationContext()像@MehmetSeçkin回答。

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

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