Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare(); [duplicate]

I have an Android app running a thread. I want a Toast message to show with a message.

When I do this, I get the below exception:

Logcat trace:

FATAL EXCEPTION: Timer-0   java.lang.RuntimeException: Can't create handler inside thread that has not      called Looper.prepare()   at android.os.Handler.<init>(Handler.java:121)  at android.widget.Toast$TN.<init>(Toast.java:322)  at android.widget.Toast.<init>(Toast.java:91)  at android.widget.Toast.makeText(Toast.java:238)  

Is there a work around for pushing Toast messages from threads to the User Interface?

like image 423
Amar Avatar asked Jun 29 '13 10:06

Amar


1 Answers

I got this exception because I was trying to make a Toast popup from a background thread.
Toast needs an Activity to push to the user interface and threads don't have that.
So one workaround is to give the thread a link to the parent Activity and Toast to that.

Put this code in the thread where you want to send a Toast message:

parent.runOnUiThread(new Runnable() {     public void run() {         Toast.makeText(parent.getBaseContext(), "Hello", Toast.LENGTH_LONG).show();     } }); 

Keep a link to the parent Activity in the background thread that created this thread. Use parent variable in your thread class:

private static YourActivity parent; 

When you create the thread, pass the parent Activity as a parameter through the constructor like this:

public YourBackgroundThread(YourActivity parent) {     this.parent = parent; } 

Now the background thread can push Toast messages to the screen.

like image 114
Eric Leschinski Avatar answered Sep 20 '22 02:09

Eric Leschinski