Java Android LocationListener崩溃
我正在尝试通过切换按钮启用/禁用GPS服务。应用程序启动时未选中该按钮,GPS服务将被禁用(应该禁用)。它们能够成功地打开,并且工作得很好,但是当我再次关闭它时,它崩溃了。代码如下: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;
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())中。