Boardy
Boardy

Reputation: 36237

Threading error "Can't create handler inside thread that has not called Looper.Prepare" with Android

I am currently developing an Android app where I need to perform a method inside a thread. I have the following code in order to create the thread and perform the

new Thread(new Runnable() { 
      @Override
      public void run() {
          new DownloadSync(getApplicationContext());
      }
}).start();

When I try to run this code it displays the error message in the log cat:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.Prepare().

How can I fix this problem?

Upvotes: 1

Views: 115

Answers (2)

Caspar Harmer
Caspar Harmer

Reputation: 8117

I had an earlier answer that was not very helpful - I've removed it and kept the relevant bit:

Make sure your DownLoadSync object only communicates with the main UI thread via a handler (if you want to avoid using an AsyncTask) Declare a runnable and a handler as shown:

final Runnable updateMainUIThread = new Runnable() {
        public void run() {
            Toast.makeText(getBaseContext(), "Communicating with the main thread!!", Toast.LENGTH_LONG).show();
        }
    };


private final Handler handler = new Handler();`

And use it like this: handler.post(updateMainUIThread);

Upvotes: 0

nicholas.hauschild
nicholas.hauschild

Reputation: 42834

Use AsyncTask. Your situation is the reason for its existence. Also, read up on Painless Threading (which is mostly using AsyncTask).

The issue with your code is that something is trying to use a Handler internally in your new Thread, but nothing has told the Looper to prepare.

Upvotes: 3

Related Questions