【问题标题】:Android GPS not working安卓 GPS 不工作
【发布时间】:2012-05-16 20:31:32
【问题描述】:

每次运行代码时都会收到 NullPointerException。我在代码中启用了 Internet 和 GPS 权限(ACCESS_FINE_LOCATION、ACCESS_MOCK_LOCATION 和 ACCESS_COARSE_LOCATION)。我用模拟器和手机都试过了,都失败了。这不是 GPS 或 Internet 不可用的问题,AFAIK。

我的代码 sn-p:-

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

    mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  
    View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
        new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
    mapView.displayZoomControls(true);
    mapView.setStreetView(false);
    mapView.setSatellite(false);

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

    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            MINIMUM_TIME_BETWEEN_UPDATES, 
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
            new MyLocationListener()
    );

    mc = mapView.getController();
    //        String coordinates[] = {"51.708945", "8.745928"};  //THIS WORKS IF ENABLED
    //        double lat = Double.parseDouble(coordinates[0]);
    //        double lng = Double.parseDouble(coordinates[1]);


    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double lat = location.getLatitude(); //NULLPOINTER EXCEPTION THROWN HERE
    double lng = location.getLongitude();

    p = new GeoPoint(
        (int) (lat * 1E6), 
        (int) (lng * 1E6)); 

    mc.animateTo(p);
    mc.setZoom(17); 
    //---Add a location marker---
    MapOverlay mapOverlay = new MapOverlay();
    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();
    listOfOverlays.add(mapOverlay);     

    mapView.invalidate();
    } catch (Exception e) {}
}

当我尝试获取纬度或经度时,它会引发 NullPointer 异常。我该如何避免呢? locationManager 对象在创建时不会抛出任何异常(使用 getSystemService 方法),在请求位置更新时也不会抛出任何异常。我可以在使用它之前检查对象是否为空,但我不明白为什么它在这一点上为空......值得睡觉吗?那是正确的编程方式吗?我不明白为什么当我尝试获取经度/纬度时它不起作用。我是不是做错了什么?

hereherehere 解决的问题无法解决我的问题。 谢谢。

【问题讨论】:

    标签: android gps nullpointerexception


    【解决方案1】:

    我想说最可能的问题是 LocationManager 没有最后一个已知位置,因此它返回 null。在这种情况下,您需要等待位置更新才能获取位置。

    -= 更新 =- 只需这样做:

    public void onLocationChanged(Location location) {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
    
        p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6)); 
    
        mc.animateTo(p);
        mc.setZoom(17);
    }
    

    由于这是一个内部类,它可以访问您的所有 Activity 成员。

    【讨论】:

    • 嗨,CaseyB。也许这就是问题所在,但它根本不允许我等待,它在完成启动之前就崩溃了。我怎么能等呢。
    • 是的,它在启动时崩溃,因为当您调用 getLastKnownLocation 时它返回 null 并且您尝试调用 null 对象上的方法。您需要做的是向 LocationManager 添加一个 LocationListener 并从中获取更新。
    • 其实我已经有一个LocationListener,但它在另一个类中。 Here 是我的全部代码。我应该再添加一个 Listener 吗?
    • 我在哪里添加这个?在 MyLocalListener 类或 MapOverlay 类中?提前致谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多