2015-05-12 1 views
0

У меня есть функция 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()" не делается ...

Любые идеи?

С наилучшими пожеланиями Джон

+0

so call другой метод в 'onLocationChanged' – pskink

+0

Нет гарантии, что вы собираетесь * когда-либо * получить исправление местоположения. У пользователя может быть отключен поставщик GPS в настройках. Или пользователь может находиться в определенном месте (например, гараж, конференц-центр), где они не могут получить GPS-исправление. Любой, кто пытается получить исправления местоположения, должен иметь дело с случаем, когда исправление местоположения никогда не поступит. И '$ DEITY' поможет вам, если' onDataSetChanged() 'вызывается в главном потоке приложения, поскольку вы пытаетесь заблокировать его в течение длительных периодов времени, пытаясь получить исправления местоположения. Возможно, вам нужно реорганизовать ваш код, чтобы он был более управляемым событиями. – CommonsWare

ответ

0

Глядя на документы here, он говорит: Не забудьте позвонить бросить(), чтобы закончить цикл. ;)