MapView的空指针异常

时间:2012-07-13 13:59:57

标签: java android google-maps

我一直试图找出导致此错误的原因:

>07-13 23:44:06.715: E/AndroidRuntime(2932): FATAL EXCEPTION: main
07-13 23:44:06.715: E/AndroidRuntime(2932): java.lang.NullPointerException
07-13 23:44:06.715: E/AndroidRuntime(2932):     at android.app.Activity.findViewById(Activity.java:1825)
07-13 23:44:06.715: E/AndroidRuntime(2932):     at com.example.usignasync.MainActivity.runOverlaysAgain(MainActivity.java:141)

我的目标是在GPS位置发生变化时重新加载一些地图叠加层,因此我设置了GPS并onLocationChanged()调用了runOverlaysAgain(),但我无法调用使用{使用findViewById的课程之外的{1}}。这是因为Activity位于使用onLocationChanged()的类中,而LocationListener位于使用MapActivity的类中。所以基本上runOverlaysAgain()无法从findViewById运行,我该如何解决这个问题?下面是LocationListener,第二行是第141行,如错误中所述:

runOverlaysAgain()

许多重新声明只是我试图弄清楚发生了什么,并没有占上风。可以删除它们,并再次生成类似的错误。因此,我需要两个可能的事情,如何修复此错误或如何在onCreate()之外创建mapOverlays。

这是XML:           

protected void runOverlaysAgain(){
    mapView = (MapView) findViewById(R.id.mapview);
    mapOverlays = mapView.getOverlays();    
    Log.d("A", Integer.toString(mapOverlays.size()));
    mapOverlays.clear();
        String latitude;
        String longitude;
        if(lastKnownLocation!=null){
        latitude =    GPSTracker.yourLocation.substring(3,GPSTracker.yourLocation.indexOf("Long"));
        longitude = GPSTracker.yourLocation.substring(GPSTracker.yourLocation.indexOf("Long")+4, GPSTracker.yourLocation.length());
        }
        else{
            latitude="92000";
            longitude ="92000";
        }

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

首先授予此权限

然后在res / layout / main.xml中以这种方式声明mapview

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>

然后在您的主要活动中调用mapview,如下所示

MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);