我正在尝试使用以下代码获取当前用户位置 - 城市:
private String getCurrentLocation() {
LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locListener = new MyLocationListener();
try {
gps_enabled = locManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
if(!gps_enabled){
// Show alert dialog
}
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000, 1, locListener,Looper.getMainLooper());
}
if (gps_enabled) {
location = locManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
if (network_enabled && location == null) {
locManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 1000, 1, locListener,Looper.getMainLooper());
}
if (network_enabled && location == null) {
location = locManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
Fetch city code...
...
}
由于这需要一点时间来加载我使用异步任务在活动启动时显示加载程序。
private class GetLocationTask extends AsyncTask<String, Integer, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgress();
}
@Override
protected String doInBackground(String... params) {
return getCurrentLocation();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
onFinshGetLocationTask(result);
}
}
它崩溃了,所以当我们requestLocationUpdates
时我使用了looperlocManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 1000, 1, locListener,Looper.getMainLooper());
但仍然app崩溃说“每个线程只能创建一个Looper”
我已经研究了很多线程,但仍然无法解决它。
答案 0 :(得分:0)
因为你不需要在Asynctask中这样做。只需调用它而不使用线程。它将创建自己的线程。
尝试使用它而不使用looper。
使用此方法
requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
并调用getCurrentLocation();不使用asynctask。
在Asynctask的doInBackGround中
@Override
protected Object doInBackground(Object[] params) {
Looper.prepare();
//do your task
Looper.myLooper().quit();
return null;
}