处理程序是抽象的,无法实例化


97

我正在尝试Handler在我的应用中使用A。但是当我像这样实例化它时:

Handler handler = new Handler();

我收到以下错误。

Gradle: error: Handler is abstract; cannot be instantiated

当我检查解决方案时,它要求我实施以下方法:

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

        }

        @Override
        public void flush() {

        }

        @Override
        public void publish(LogRecord record) {

        }
    };

我以前从未使用Handlers过,只是在一段时间延迟后才调用它。为此,我使用了:

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

但是它显示了错误:

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

请帮忙!提前致谢。

Answers:


379

看来您导入了错误的Handler类

import java.util.logging.Handler;

更改为

import android.os.Handler;

3
这确实对我有所帮助-作为iOS开发人员,我偶尔会返回Android项目,因此Android Studio会有一些令人讨厌的怪癖,尝试在导入/自动完成方面太聪明了,即90%的时间更快,慢5倍10%的时间。再次感谢
Joel Balmer 2014年

1
@ Glenn--,不好意思,这只是解决了我代码中的所有其他错误。++这个答案!
乔尔·巴尔默

两者之间有什么区别?
Krishnadas PC

很难相信他们会使用Java中已经定义的类名...
Julius

5

代替

import java.util.logging.Handler; 

import android.os.Handler;

同样如果你使用

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

    }

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};

它将给出布尔值发现类似错误的错误,因此可以使用布尔值处理程序= new Handler()...或简单地使用(new Handler()){...。


2

Android SDK会自动导入不正确的版本。这就是人们有问题的原因。


在Android方面,这是完全荒谬的
Julius

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

1
愿意添加一些解释吗?
Onik,2015年

0

导入android.os.Handler; 这是您的紫红色所需的处理程序。在导入Handler类之前,请尝试导入以上内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.