MapView上的空指针异常

时间:2014-02-02 19:52:47

标签: java android android-fragments google-maps-android-api-2

我似乎找不到解决以下问题的方法。我在下面的MapView上得到null pointer exception我试图在一个Activity中使用。

爪哇

public class ActivityMAIN extends FragmentActivity implements LocationListener {

private GoogleMap mMap; 

...

mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.myMapView)).getMap();
       //LOGCAT shows Null at above statement only

LatLng sydney = new LatLng(-33.867, 151.206);

    mMap.setMyLocationEnabled(true);
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

    mMap.addMarker(new MarkerOptions()
            .title("Sydney")
            .snippet("The most populous city in Australia.")
            .position(sydney));

XML

<fragment 
  android:id="@+id/myMapView"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:name="com.google.android.gms.maps.MapFragment"/>

logcat的

02-02 12:42:51.356: E/AndroidRuntime(4003): Process: com.testing.googlemaps, PID: 4003
02-02 12:42:51.356: E/AndroidRuntime(4003): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.testing.googlemaps/com.testing.googlemaps.ActivityMAIN}: java.lang.NullPointerException
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.os.Handler.dispatchMessage(Handler.java:102)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.os.Looper.loop(Looper.java:136)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.ActivityThread.main(ActivityThread.java:5017)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at java.lang.reflect.Method.invokeNative(Native Method)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at java.lang.reflect.Method.invoke(Method.java:515)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at dalvik.system.NativeStart.main(Native     Method)
02-02 12:42:51.356: E/AndroidRuntime(4003): Caused by: java.lang.NullPointerException
02-02 12:42:51.356: E/AndroidRuntime(4003):     at com.testing.googlemaps.ActivityMAIN.onCreate(ActivityMAIN.java:150)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.Activity.performCreate(Activity.java:5231)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-02 12:42:51.356: E/AndroidRuntime(4003):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)

3 个答案:

答案 0 :(得分:1)

问题似乎是你调用fragment.getMap()方法的时候,你试图在你的活动创建上获取地图,此时片段没有显示,所以片段存在但不是GoogleMap元素,尝试在您的活动的onResume()方法上执行此操作,或确保使用setContentView设置活动的内容(...)

答案 1 :(得分:1)

您的代码看起来很好,但在xml中您必须更改此行

<强>机器人:名称=&#34; com.google.android.gms.maps.MapFragment&#34;

<强>机器人:名称=&#34; com.google.android.gms.maps.SupportMapFragment&#34;

答案 2 :(得分:0)

mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.myMapView)).getMap();
   //LOGCAT shows Null at above statement only

您确认((MapFragment) getFragmentManager().findFragmentById(R.id.myMapView))不为空吗?在这一行可能是空的吗?

此处的一些讨论可能有助于谷歌服务:getMap() returning null