Der Handler ist abstrakt und kann nicht instanziiert werden
Lesezeit: 3 Minuten
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
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;
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.
12822300cookie-checkDer Handler ist abstrakt und kann nicht instanziiert werdenyes