У меня было приложение для определения местоположения, но я изменил код, и теперь местоположение всегда возвращает значение null. К сожалению, я не уверен, какой код я изменил, но я просто не могу заставить его работать.

Кто-нибудь может понять, почему это возвращает ноль? Я работаю над этим весь день без всякого удовольствия. код ниже:

....imports....

public class Clue extends Activity {

public static double latitude;
public static double longitude;
Criteria criteria;
LocationManager lm;
LocationListener ll;
Location location;

  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  setContentView(R.layout.questions);

  criteria = new Criteria();
  criteria.setAccuracy(Criteria.ACCURACY_FINE);
  lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  ll = new MyLocationListener();
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);

areWeThereYet();
}

   private void areWeThereYet()
  {
      if(weAreThere())
      {
      showMsgBox("There");  
    }
  else if(location!=null)
      toastMsg("not there");
       }

    private boolean weAreThere() {

location = getLocation(); 
if (location!=null)
{
longitude = location.getLongitude();
latitude = location.getLatitude();
return inCorrectPlace(question);
}
else
{
    toastMsg("Location not ready yet");
    return false;
}
}

private Location getLocation() {
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
      return lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}

}

public class MyLocationListener implements LocationListener
{
    public void onLocationChanged(Location loc)
    {        
         Clue.longitude = loc.getLongitude();
         Clue.latitude = loc.getLatitude();
    }
}

Я добавил все разрешения и упростил свой код, чтобы вы все могли видеть, что происходит.

Благодарность,

Бен

1
Ben Taliadoros 15 Дек 2011 в 22:34
Просто предложение на будущее: поместите свой код в систему контроля версий!
 – 
Jacob Mattison
15 Дек 2011 в 22:37
Обычно я так и делаю, это был небольшой побочный проект, так что я не стал беспокоиться :S, хотя бы сейчас!
 – 
Ben Taliadoros
15 Дек 2011 в 22:39
1
Вы делаете это на устройстве или эмуляторе? Если устройство, убедитесь, что GPS не выключен. Если эмулятор, я думаю, вам нужно использовать DDMS для отправки местоположения хотя бы один раз, чтобы у locationManager было место для возврата?
 – 
Kaediil
15 Дек 2011 в 22:54
Зачем дублировать пост? stackoverflow.com/questions/8526771/location-returns-null
 – 
John Giotta
16 Дек 2011 в 01:38

1 ответ

Это null, потому что когда вы впервые запускаете свою активность в onCreate, она еще не готова. Когда вы в конечном итоге получаете обновление местоположения через onLocationChanged, вы устанавливаете широту/долготу в своем классе Clue, но это все... ничто не вызывает повторно ваш метод areWeThereYet. Вам нужно будет вызвать этот метод после обновления вашего местоположения.

1
Chris 15 Дек 2011 в 22:55
Он вызывается нажатием кнопки, даже после некоторого ожидания он все равно возвращает ноль. Любые идеи?
 – 
Ben Taliadoros
15 Дек 2011 в 22:59
Местоположение по-прежнему отображается как нулевое, есть идеи, почему это может быть?
 – 
Ben Taliadoros
16 Дек 2011 в 00:54