2013-12-19 8 views
6

Ich entwickle ein Spiel über Andengine für Android. Ich habe die MainActivity-Klasse und die GameScene-Klasse. Ich verwende Toast-Nachrichten in GameActivity. Und es funktioniert.Android Toast Nachrichten funktioniert nicht

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

Also ich möchte Toast-Nachrichten in der GameScene-Klasse verwenden. Aber es funktioniert nicht. Hier ist der Code:

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

Ich muss "Aktivität" anstelle von "dies" verwenden. Aber es funktioniert nicht

warum?

edited:

wenn ich zweite verwenden, tritt ein Fehler auf. LogCat: http://s29.postimg.org/k8faj9mdj/Capture.png

+3

Haben Sie versucht, _activity.getApplicationContext() _? –

+0

Was ist Ihre Aktivität? –

+1

verwenden ** YourActivity.this ** –

Antwort

21

Sie versuchen, eine Toast in einem Hintergrundthread anzuzeigen. Sie sollten alle UI-Vorgänge im Hauptthread der Benutzeroberfläche ausführen.

Die Ausnahme RuntimeException: Can't create handler inside thread that has not called Looper.prepare() kann ein wenig kryptisch für Anfänger sein, aber im Wesentlichen sagt es Ihnen, dass Sie in einem falschen Thread sind.

Um es zu lösen, wickeln Sie den Toast z.:

activity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
    Toast.makeText(...).show(); 
    } 
}); 
+1

sollte ich die Aktivität setzen? oder sollte ich dies schreiben.runOnUiThread()? @ Laalto – gumuruh

0

Verwendung:

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

oder

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

dies versuchen.

0

Da Sie gefragt warum; Ich denke, Sie geben eine Aktivitätsreferenz als Kontext für die Toast-Nachricht, deshalb funktioniert es nicht.

Wenn Sie versuchen, von außerhalb einer Aktivität eine Toast Nachricht zu zeigen, könnten Sie versuchen:

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

oder aus dem GameActivity

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

oder aus dem MainActivity

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

Dort c Zwei Gründe, warum dein Code nicht funktioniert. Es ist Äther Ihre Aktivität Parameter ist null oder ...

Kurze Zeit nach dem Sie den Toast zeigen die Aktivität ist sterben, in diesem Fall wird es auch den Toast töten, um dies zu vermeiden können Sie activity.getApplicationContext() wie in @Mehmet Seçkin anrufen Antworten.

1

Verwendung eines der folgenden

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

Da Du es von der Klasse aufrufen. Sie müssen den Kontext von der Aktivität über den Klassenkonstruktor abrufen, andernfalls müssen Sie GetApplicationcontext() verwenden.