在Android应用开发中,如果需要在子线程中使用Handler,需要在子线程中调用Looper.prepare()方法。在你的代码中,你在子线程中启动了位置监听器,并且在位置监听器的回调函数中执行了操作,因此需要调用Looper.prepare()方法。\n\n修改你的代码,在locationRunnable的run()方法中添加Looper.prepare()和Looper.loop()方法,如下所示:\n\njava\nRunnable locationRunnable = new Runnable() {\n @Override\n public void run() {\n try {\n // 检查权限\n if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED\n && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n // 如果没有权限,请求获取权限\n ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);\n return;\n }\n\n // 在子线程中使用Handler,需要调用Looper.prepare()\n Looper.prepare();\n\n // 注册位置监听器\n locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);\n locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 10, locationListener);\n\n // 在子线程中使用Handler,需要调用Looper.loop()\n Looper.loop();\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n};\n\n\n这样修改后,就可以解决"Can't create handler inside thread"的错误。


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

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