2013-12-19 108 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()。