private final Handler mHandler = new Handler(); private final Runnable countdownRunnable = new Runnable() { @Override public void run() { mCountDown.setText(getString(R.string.route_result_countdown_text, String.valueOf(countdownTime--))); if (countdownTime > 0) { mHandler.postDelayed(this, 1000); } else { //倒计时结束开始导航 startNavi(); } } }; mHandler.postDelayed(countdownRunnable, 1000); 这段代码报错 Caused by: java.lang.RuntimeException: Can't create handler inside thread Thread[AsyncTask #1,5,main] that has not called Looper.prepare() 帮我修改一下
时间: 2023-12-17 15:03:00 浏览: 322
netty-handler-4.1.73.Final-API文档-中文版.zip
5星 · 资源好评率100%
这个错误提示是因为你在一个非UI线程中创建了一个Handler对象,而Handler需要在主线程中创建。你可以将创建Handler对象的代码放在UI线程中,或者使用runOnUiThread()方法来更新UI。
修改后的代码如下:
```
runOnUiThread(new Runnable() {
@Override
public void run() {
mHandler = new Handler();
mHandler.postDelayed(countdownRunnable, 1000);
}
});
```
另外,由于Handler会持有外部类的引用,如果你在Activity或Fragment中使用Handler,建议将Handler定义为静态内部类,避免内存泄漏。
阅读全文