Сбой Android LocationListener - PullRequest
       70

Сбой Android LocationListener

2 голосов
/ 29 ноября 2011

Я пытаюсь включить / отключить службы GPS с помощью кнопки ToggleButton. Приложение запускается с отключенной кнопкой, а службы GPS отключены (как и должно быть). Они включаются успешно и прекрасно работают НО , когда я снова выключаю его, он вылетает. Вот код:

    final LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    final LocationListener locationListener = null;
    final ToggleButton gpsButton = (ToggleButton) findViewById(R.id.gpsButton);


    gpsButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

            if (gpsButton.isChecked()) {
                 LocationListener locationListener = new LocationListener() {
                    public void onLocationChanged(Location location) {
                      // Called when a new location is found by the network location provider.

                        //doing some stuff with locations


                    }

                    public void onStatusChanged(String provider, int status, Bundle extras) {}

                    public void onProviderEnabled(String provider) {}

                    public void onProviderDisabled(String provider) {}
                  };
                  locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, seconds, 0, locationListener);
            }
            else {
                locationManager.removeUpdates(locationListener);
            }
        }

1 Ответ

2 голосов
/ 29 ноября 2011

Вы объявляете locationListener за пределами onClickListener, но затем создаете новую локальную переменную locationListener, когда пользователь нажимает кнопку.

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

...
if (gpsButton.isChecked()) {
    locationListener = new LocationListener() {
    ...
...