我正在尝试在我的应用中使用Handler
。但是当我像这样实例化时:
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)
请帮忙! 提前谢谢。
答案 0 :(得分:346)
您似乎导入了错误的Handler类
import java.util.logging.Handler;
将其更改为
import android.os.Handler;
答案 1 :(得分:3)
取代
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) {
}
};
它会给出boolean发现错误的错误,所以要么使用boolean handler = new Handler()... 或者简单地使用(new Handler()){....`
答案 2 :(得分: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();
};
}
}
答案 3 :(得分:1)
Android SDK自动导入错误的一个。这就是人们遇到问题的原因。
答案 4 :(得分:0)
导入android.os.Handler; 这个处理程序需要你的紫色。在导入Handler类之前,请尝试导入上面的内容。
答案 5 :(得分:0)
似乎您实现了错误的Handler类
import java.util.logging.Handler;
更改为
import android.os.Handler;