mic*_*ael 2 multithreading android
我创建了一个AsyncTask来检索具有20米精度的GPS位置.我想执行一个while循环,直到准确性可以加入.
问题是我请求更新职位时遇到异常.
java.lang.NullPointerException: Calling thread must be a prepared Looper thread.
Run Code Online (Sandbox Code Playgroud)
这是一段错误的代码
@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;
}
Run Code Online (Sandbox Code Playgroud)
我整整一个工作日都遇到了麻烦.我在服务中的后台运行FusedLocationApi.
我做了什么 - 我在其他地方读到它 - 是添加Looper.getMainLooper()作为最后一个参数requestLocationUpdates().
所以,而不是这个
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,activity);
Run Code Online (Sandbox Code Playgroud)
你会的
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this, Looper.getMainLooper());
Run Code Online (Sandbox Code Playgroud)
如果您阅读整个FusedLocationProviderApi页面,您将看到该方法将根据参数执行不同的操作.
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |