程序报错javalangRuntimeException Cant create handler inside thread ThreadThread-35main that has not called Looperprepare代码如下package commkolocation1;import androidxappcompatappAppCompatActivity;import andr
在Android应用开发中,如果需要在子线程中使用Handler,需要在子线程中调用Looper.prepare()方法。在你的代码中,你在子线程中启动了位置监听器,并且在位置监听器的回调函数中执行了操作,因此需要调用Looper.prepare()方法。
修改你的代码,在locationRunnable的run()方法中添加Looper.prepare()和Looper.loop()方法,如下所示:
Runnable locationRunnable = new Runnable() {
@Override
public void run() {
try {
// 检查权限
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// 如果没有权限,请求获取权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
return;
}
// 在子线程中使用Handler,需要调用Looper.prepare()
Looper.prepare();
// 注册位置监听器
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 10, locationListener);
// 在子线程中使用Handler,需要调用Looper.loop()
Looper.loop();
} catch (Exception e) {
e.printStackTrace();
}
}
};
这样修改后,就可以解决"Can't create handler inside thread"的错误
原文地址: https://www.cveoy.top/t/topic/ioNh 著作权归作者所有。请勿转载和采集!