Java Android LocationListener崩溃

Java Android LocationListener崩溃,java,android,gps,locationmanager,locationlistener,Java,Android,Gps,Locationmanager,Locationlistener,我正在尝试通过切换按钮启用/禁用GPS服务。应用程序启动时未选中该按钮,GPS服务将被禁用(应该禁用)。它们能够成功地打开,并且工作得很好,但是当我再次关闭它时,它崩溃了。代码如下: final LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); final LocationListener locationListener = null;

我正在尝试通过切换按钮启用/禁用GPS服务。应用程序启动时未选中该按钮,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);
            }
        }

您正在
onClickListener
外部声明
locationListener
,但当用户单击按钮时,将创建一个新的本地
locationListener
变量

当您试图从中删除更新时,它仍然是
null
,因为您创建了一个不同的变量。从
onClick
方法中的
locationListener
中删除类型声明,使其成为

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

请发布您的logcat堆栈跟踪,因为它描述了错误嗨,谢谢!但是有一个小问题,如果我不在onClick中声明它,它会给我一个错误,它是最终的,我无法更改它。当我从顶部的初始声明中删除“final”时,它会给我一个错误,我需要将其设置为final。是的。。。然后您应该在声明它时初始化它,而不是将其设置为
null
,而是使用构造函数
newlocationlistener(){…
是的,这种方式是有效的,但我只想在按下切换按钮时启用它。这样默认情况下它将被启用,对吗?不,将创建侦听器,但在调用
requestLocationUpdates
之前它不会被“启用”。谢谢,所以我将requestLocationUpdates放入if(gpsButton.isChecked())中。