Handler is abstract ,cannot be instantiated

JavaAndroidAndroid Handler

Java Problem Overview


I am trying to use a Handler in my app. However, when I instantiate it like this:

Handler handler = new Handler();

I get the following error:

> Gradle: error: Handler is abstract; cannot be instantiated

And when I check the solutions, it asks me to implement these methods:

Handler handler = new Handler() {
    @Override
    public void close() {
        
    }

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};

I have never used Handlers before and I am using it just to call a method after some delay. To achieve that, I've used:

handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //Do something after 100ms
        }
    }, 100);

But it shows the error:

> Gradle: error: cannot find symbol method postDelayed(,int)

Java Solutions


Solution 1 - Java

It seems you have imported a wrong Handler class

import java.util.logging.Handler;

Change it to

import android.os.Handler;

Solution 2 - Java

In Place Of

import java.util.logging.Handler; 

add

import android.os.Handler;

also if you use

Handler handler = new Handler() {
    @Override
    public void close() {

    }

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};

it will give error that boolean found somthing like error so either use boolean handler = new Handler()... or simply use (new Handler()){....`

Solution 3 - Java

Android SDK auto imports the incorrect one. That's why people have problems.

Solution 4 - Java

    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

public class ActionActivity extends ActionBarActivity {

    final String LOG_TAG = "myLogs";
    TextView tvInfo;
    Button btnStart;
    Handler h;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.action_activity);
        tvInfo = (TextView)findViewById(R.id.tvinfo);
        btnStart = (Button)findViewById(R.id.btnstart);

        h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                // update TextView
                tvInfo.setText("Закачано файлов: " + msg.what);
                if (msg.what == 10) btnStart.setEnabled(true);
            };
        };

    }

    public void onclick(View v) {
        switch (v.getId()) {
            case R.id.btnstart:
                btnStart.setEnabled(false);
                Thread t = new Thread(new Runnable() {
                    public void run() {
                        for (int i = 1; i <= 10; i++) {
                            // some process
                            downloadFile();
                            h.sendEmptyMessage(i);
                            
                            Log.d(LOG_TAG, "i = " + i);
                        }
                    }
                });
                t.start();
                break;
            case R.id.btnTets:
                Log.d(LOG_TAG, "test");
                break;
            default:
                break;
        }
    }

    public void downloadFile(){
        try{
            TimeUnit.SECONDS.sleep(1);
        }
        catch (InterruptedException e){
                e.printStackTrace();
        };
    }
}

Solution 5 - Java

It seems like you have implemented the wrong Handler class

import java.util.logging.Handler;

Change it to

> import android.os.Handler;

Solution 6 - Java

import android.os.Handler; this the handler needed for your purpous. Before importing the Handler class please try to import the above.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChinmay DabkeView Question on Stackoverflow
Solution 1 - JavaGlennView Answer on Stackoverflow
Solution 2 - Javauser5035650View Answer on Stackoverflow
Solution 3 - JavaSPC700View Answer on Stackoverflow
Solution 4 - JavaVahe GharibyanView Answer on Stackoverflow
Solution 5 - JavaAtharva KulkarniView Answer on Stackoverflow
Solution 6 - JavaSujith KsView Answer on Stackoverflow