2013-12-19 20 views
6

Android用のAndengine経由でゲームを開発しています。私はMainActivityクラスとGameSceneクラスを持っています。私はGameActivityでToastメッセージを使用します。それは働いています。Android Toastメッセージが機能しない

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

私はGameSceneクラスでToastメッセージを使用したいと考えています。しかし、それは動作しません。コードは次のとおりです。

「this」の代わりに「activity」を使用する必要があります。しかし、それは動作しません

なぜですか?

EDITED:

2番目のものを使用するとエラーが発生します。 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

を使用してください。またはthis.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

理由を聞いたので、私はトーストメッセージの文脈として活動参照を与えていると思うので、これはうまくいきません。

あなたが活動の外からトーストメッセージを表示しようとしている場合、あなたは試みることができる:

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

cコードが機能しない2つの理由があります。それはあなたの活動パラメータがヌルであるエーテルです...

トーストを表示した後の短い時間は、活動が死んでいる場合、これを避けるために、これを避けるために、あなたは@MehmetSeçkinのようにactivity.getApplicationContext()と呼ぶことができます回答。次

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

使用1あなたはクラスからそれを呼び出しているので。アクティビティからクラスコンストラクタを介してコンテキストを取得する必要があります。そうしないと、GetApplicationcontext()を使用する必要があります。

関連する問題