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

Chi*_*bke 93 java android android-handler

我想Handler在我的应用程序中使用a .但是当我像这样实例化时:

Handler handler = new Handler();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

Gradle: error: Handler is abstract; cannot be instantiated
Run Code Online (Sandbox Code Playgroud)

当我检查解决方案时,它要求我实现这些方法:

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

        }

        @Override
        public void flush() {

        }

        @Override
        public void publish(LogRecord record) {

        }
    };
Run Code Online (Sandbox Code Playgroud)

我以前从未使用Handlers过,我只是在经过一段时间后调用方法.为此,我使用了:

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

但它显示错误:

Gradle: error: cannot find symbol method postDelayed(<anonymous Runnable>,int)
Run Code Online (Sandbox Code Playgroud)

请帮忙!提前致谢.

Gle*_*enn 363

您似乎导入了错误的Handler类

import java.util.logging.Handler;
Run Code Online (Sandbox Code Playgroud)

将其更改为

import android.os.Handler;
Run Code Online (Sandbox Code Playgroud)

  • 这当然对我很有帮助 - 作为一个iOS开发人员回到偶尔的Android项目,Android Studio有一些恼人的怪癖,试图在导入/自动完成时太聪明了,即90%的时间更快,是5倍慢10%的时间.再次感谢 (3认同)

小智 5

代替

import java.util.logging.Handler; 
Run Code Online (Sandbox Code Playgroud)

import android.os.Handler;
Run Code Online (Sandbox Code Playgroud)

如果您使用

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

    }

    @Override
    public void flush() {

    }

    @Override
    public void publish(LogRecord record) {

    }
};
Run Code Online (Sandbox Code Playgroud)

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