Android位置管理器返回空指针异常

时间:2012-03-21 19:14:09

标签: java android nullpointerexception

我有一个问题,我正在尝试创建一个使用位置管理器但不是当前正在运行的活动的类。因此,当我从任何活动中调用此类时,它只是在后台完成所有操作。我尝试扩展服务但仍然返回空指针错误。

正是这行代码返回错误。

public class BackgroundGps extends Service{
UserObject uo = null;
BackgroundGps(UserObject userObj){
    uo = userObj;
    uo.setHeader("GPSUpdate");
}
public void locationListener(){
    LocationManager mlocManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    LocationListener mlocListener = new LocationListener(){
        public void onLocationChanged(Location location){
            if(uo.getLatitude() == ("" + location.getLatitude()) && uo.getLongitude() == ("" + location.getLongitude())){}
            else{
                uo.setLatitude("" + location.getLatitude());
                uo.setLongitude("" + location.getLongitude());
                updateGPS();
            }
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {}
        public void onProviderDisabled(String provider) {}
    };
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, mlocListener);
    mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 5, mlocListener);
}

由于

3 个答案:

答案 0 :(得分:1)

获取对系统位置管理器的引用

 LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

locationManager不会在设备上抛出nullpointer,将在模拟器上抛出

使用位置管理器注册侦听器以接收位置更新。在这里,您可以根据需要使用NETWORK_PROVIDER或GPS_PROVIDER等*

 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

答案 1 :(得分:1)

您需要在当前getSystemService()上致电Context。当你拨打这个班级时,你是否在传递当前的Context

答案 2 :(得分:0)

您是否真的使用Intents启动服务?

如果您没有并且只是在Activity中创建new BackgroundGps(),那么服务没有上下文(null)。