当前位置: 首页 > 知识库问答 >
问题:

Android GPS无法工作

谭建章
2023-03-14

每次运行代码时都会得到一个NullPointerException。我在代码中启用了Internet和GPS权限(ACCESS_FINE_LOCATION、ACCESS_MOCK_LOCATION、&ACCESS_COARSE_LOCATION)。我试过模拟器和电话,都失败了。这不是全球定位系统或互联网不可用的问题。

我的代码段:-

@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方法)不会引发任何异常,在请求位置更新时也不会给出任何异常。我可以在使用它之前检查对象是否为空,但我不明白为什么它在那一点上为空...值得进行Hibernate吗?这是正确的编程方式吗?我不明白为什么当我试图得到经度/纬度时它不起作用。我做错什么了吗?

这里或这里或这里的问题不能解决我的问题。谢谢.

共有1个答案

宦树
2023-03-14

我想说,最可能的问题是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成员。

 类似资料:
  • 我正在使用drools Version6.0.0.Final做一个示例hello world maven项目。下面是我的pom文件的构建,我已经指定了kie-maven-plugin,但是我可以注意到这个插件不能被执行。我是不是漏掉了什么。

  • 问题内容: 我有以下课程: :和: :但是当我用: :我收到错误消息: :有人能对此有所启发吗? 问题答案: 从那以后我就知道了。您需要先运行: java -DoutputDirectory =。-cp。; activejdbc-instrumentation.jar; javassist.jar; activejdbc.jar; activejdbc.instrumentation.Main

  • 我在我的帐户上启用了不太安全的应用程序,但仍然是同样的。无法发送邮件。邮件程序错误:SMTP connect()失败,我尝试使用空闲主机000WebHost。这是我的代码

  • 我现在正在尝试复制一个名为的数据库。在MySQL命令行客户机中,我正在执行我得到错误消息: 说吧,告诉我我很蠢。我只是需要一些帮助,拜托。

  • 我正在Android Studio(beta)0.8.9中构建一个应用程序,尽管我似乎无法运行模拟器。我已经通过这些选项制作了Nexus 4和5模拟器,但我似乎无法启动它们。它会在Run App选项卡中显示这一点。 所以要么它没有启动,要么我只是一个不耐烦的哭泣。 我还下载了GenyMoon,并通过它启动了一个模拟器,但现在Android Studio不再识别这个模拟器了。我试着运行我的应用程序,