在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"的错误

程序报错javalangRuntimeException Cant create handler inside thread ThreadThread-35main that has not called Looperprepare代码如下package commkolocation1;import androidxappcompatappAppCompatActivity;import andr

原文地址: https://www.cveoy.top/t/topic/ioNh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录