Android:使用 AsyncTask 时出现 "Calling thread must be a prepared Looper thread"错误

标签 android multithreading

我创建了一个 AsyncTask 来检索精度为 20 米的 GPS 位置。 我想执行一个 while do 循环,直到准确度可以接受。

问题是当我请求更新位置时出现异常。

java.lang.NullPointerException: Calling thread must be a prepared Looper thread.

这是一段出错的代码

@Override
protected String doInBackground(Void... params) {
if (ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return null;
            }
            mLocationRequest.setInterval(100);
            mLocationRequest.setPriority(100);
            mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
            while (mLastLocation == null || (mLastLocation.getAccuracy()>Float.parseFloat("20.0") && mLastLocation.hasAccuracy())){
                try {
                    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,activity);
                    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                } catch (SecurityException secex) {

                }
            }

            return null;
        }

最佳答案

这一整天的工作让我很烦恼。我有 FusedLocationApi 在服务中的后台运行。

我所做的 - 我在其他地方读到它 - 是添加 Looper.getMainLooper() 作为 requestLocationUpdates() 的最后一个参数。

所以,而不是这个

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,activity);

你会有

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this, Looper.getMainLooper());

如果您阅读全文 FusedLocationProviderApi页面,您会看到该方法将根据参数执行不同的操作。

关于Android:使用 AsyncTask 时出现 "Calling thread must be a prepared Looper thread"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42483113/

相关文章:

c - 处理高争用、高频情况的锁

linux - 多线程环境下可重入函数有什么用?

java - Thread[main,5,main] 和 Thread[Thread-77416,5,main] 有什么区别

javascript - 使用phonegap在android模拟器中调试javascript

wpf - 在单独的线程上从 Excel 读取 WPF 应用程序的性能不佳

Java套接字: Client-server communication is stuck with multi-threading if more than 1 client

android - 如何在 onActivityResult 方法收到 Intent 结果后设置 Observer 以更新抽屉导航

android - Android Doze 模式下维护窗口的频率

android - 为 Google Map v2 fragment 创建 OnDragListener

c - 在多线程聊天应用程序中使用 fgets 显示命令提示符