У меня есть функция notifyDataSetChanged, и я НЕОБХОДИМО получить изменения местоположения в этом методе и выполнить другой метод после того, как я получил эти изменения. Проблема в том, что я должен дать андроиду идентификатор местоположения и позволить службе локализовать позицию gps, а затем вызвать функцию прослушивателя. Мне нужно все это в notifyDataSetChanged.Дождитесь завершения прослушивания Android
Мой подход:
@Override
public void onDataSetChanged() {
Log.i(Constants.LOG_TAG, "entering notifyDataSetChanged()");
try {
semaphore.acquire();
Looper.prepare();
Log.i(Constants.LOG_TAG, "requesting GPS updates..");
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.i(Constants.LOG_TAG, "got a location: " + location.getLatitude() + ", " + location.getLongitude());
locationManager.removeUpdates(this);
loadData(location);
semaphore.release();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
});
Looper.loop();
//Wait for loadData to finish after i got the location
semaphore.acquire();
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(Constants.LOG_TAG, "exiting notifyDataSetChanged()");
}
Однако "не выходящим из notifyDataSetChanged()" не делается ...
Любые идеи?
С наилучшими пожеланиями Джон
so call другой метод в 'onLocationChanged' – pskink
Нет гарантии, что вы собираетесь * когда-либо * получить исправление местоположения. У пользователя может быть отключен поставщик GPS в настройках. Или пользователь может находиться в определенном месте (например, гараж, конференц-центр), где они не могут получить GPS-исправление. Любой, кто пытается получить исправления местоположения, должен иметь дело с случаем, когда исправление местоположения никогда не поступит. И '$ DEITY' поможет вам, если' onDataSetChanged() 'вызывается в главном потоке приложения, поскольку вы пытаетесь заблокировать его в течение длительных периодов времени, пытаясь получить исправления местоположения. Возможно, вам нужно реорганизовать ваш код, чтобы он был более управляемым событиями. – CommonsWare