Der Handler ist abstrakt und kann nicht instanziiert werden

Lesezeit: 3 Minuten

Benutzer-Avatar
Chinmay Dabke

Ich versuche, a zu verwenden Handler in meiner App. Wenn ich es jedoch so instanziiere:

Handler handler = new Handler();

Ich bekomme folgenden Fehler:

Gradle: Fehler: Handler ist abstrakt; kann nicht instanziiert werden

Und wenn ich die Lösungen überprüfe, werde ich aufgefordert, diese Methoden zu implementieren:

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

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};

Ich habe nie verwendet Handlers vor und ich benutze es nur, um eine Methode nach einiger Verzögerung aufzurufen. Um das zu erreichen, habe ich verwendet:

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

Aber es zeigt den Fehler:

Gradle: Fehler: Symbolmethode postDelayed(,int) kann nicht gefunden werden

Anscheinend haben Sie eine falsche Handler-Klasse importiert

import java.util.logging.Handler;

Ändern Sie es in

import android.os.Handler;

  • Es war sicherlich hilfreich für mich – als iOS-Entwickler, der gelegentlich zu Projekten für Android zurückkehrt, hat Android Studio einige lästige Macken, der Versuch, beim Importieren/Autovervollständigen ZU schlau zu sein, ist einer, dh ist in 90% der Fälle schneller, ist 5 x langsamer 10% der Zeit. Danke noch einmal

    – Joel Balmer

    12. März 2014 um 22:20 Uhr

  • @Glenn–, srsly, das hat gerade alle möglichen anderen Fehler in meinem Code behoben. ++ auf diese Antwort!

    – Joel Balmer

    12. März 2014 um 22:28 Uhr


  • Was ist der Unterschied zwischen den beiden?

    – Krishnadas PC

    16. Oktober 2015 um 7:48 Uhr

  • Es ist schwer zu glauben, dass sie einen Klassennamen verwenden würden, der bereits in Java definiert ist …

    – Julius

    23. Februar 2018 um 23:50 Uhr

Anstelle von

import java.util.logging.Handler; 

hinzufügen

import android.os.Handler;

auch wenn Sie verwenden

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

    }

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};

Es wird der Fehler ausgegeben, dass boolean so etwas wie einen Fehler gefunden hat, also verwenden Sie entweder boolean handler = new Handler()… oder verwenden Sie einfach (new Handler()){….`

Android SDK importiert automatisch das falsche. Deshalb haben die Leute Probleme.

  • Das ist für Android völlig lächerlich

    – Julius

    23. Februar 2018 um 23:51 Uhr

Benutzer-Avatar
Vahe Gharibyan

    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();
        };
    }
}

Es scheint, als hätten Sie die falsche Handler-Klasse implementiert

import java.util.logging.Handler;

Ändern Sie es in

import android.os.Handler;

Benutzer-Avatar
Sujith Ks

import android.os.Handler; Dies ist der Handler, der für Ihre Zwecke benötigt wird. Bevor Sie die Handler-Klasse importieren, versuchen Sie bitte, das Obige zu importieren.

1282230cookie-checkDer Handler ist abstrakt und kann nicht instanziiert werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy