2014-09-12 30 views
1

我試圖找到我的座標並用此代碼在地圖片段中顯示它,但是我的應用崩潰了。我使用最新的GoogleMap API。使用GoogleMaps API的NULL指針

public class gmapp extends FragmentActivity{ 

// Google Map 
private GoogleMap googleMap; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map); 

    setUpIfNeeded(); 
} 

private void setUpIfNeeded() { 
    if (googleMap == null) 
    { 
     googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
    if (googleMap != null) 
    { 
     setUpMap(); 
    } 

    } 
} 

private void setUpMap() { 

    googleMap.setMyLocationEnabled(true); 

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String provider = locationManager.getBestProvider(criteria , true); 
    Location myLocation = locationManager.getLastKnownLocation(provider); 
    googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    double latitude = myLocation.getLatitude(); 
    double longtitude = myLocation.getLongitude(); 
    LatLng latLng = new LatLng(latitude , longtitude); 
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

    googleMap.animateCamera(CameraUpdateFactory.zoomTo(20)); 
    googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude , longtitude)).title("Im here")); 

} 

}

這裏是我的錯誤消息後,我編譯它。

09-12 20:10:01.034: E/AndroidRuntime(27507): FATAL EXCEPTION: main 
09-12 20:10:01.034: E/AndroidRuntime(27507): Process: com.max.maxo, PID: 27507 
09-12 20:10:01.034: E/AndroidRuntime(27507): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.max.maxo/com.max.maxo.gmapp}: java.lang.NullPointerException 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2394) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2452) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.ActivityThread.access$900(ActivityThread.java:172) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.os.Handler.dispatchMessage(Handler.java:102) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.os.Looper.loop(Looper.java:136) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.ActivityThread.main(ActivityThread.java:5586) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at java.lang.reflect.Method.invokeNative(Native Method) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at java.lang.reflect.Method.invoke(Method.java:515) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at dalvik.system.NativeStart.main(Native Method) 
09-12 20:10:01.034: E/AndroidRuntime(27507): Caused by: java.lang.NullPointerException 
09-12 20:10:01.034: E/AndroidRuntime(27507): at com.max.maxo.gmapp.setUpIfNeeded(gmapp.java:35) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at com.max.maxo.gmapp.onCreate(gmapp.java:29) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.Activity.performCreate(Activity.java:5451) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
09-12 20:10:01.034: E/AndroidRuntime(27507): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2358) 
09-12 20:10:01.034: E/AndroidRuntime(27507): ... 11 more 

在我的XML我只得到了片段地圖

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

'findFragmentById(R.id.map)'可能爲空,即它無法在您的佈局中找到您的片段。你有沒有在XML中正確地聲明它? – Blundell 2014-09-12 18:18:54

+0

這是,添加到第一篇文章 – 2014-09-12 18:21:21

+0

只是爲了確保地圖準備就緒,當你訪問它,我會做什麼建議[這裏](http://stackoverflow.com/questions/14047257/how-do-i -know-the-map-is-ready-get-used-when-using-the-supportmapfragment)(設置實際創建片段時的回調)。 – mbmc 2014-09-12 18:50:02

回答

1

我找到了! 我的問題是我忘了添加

class="com.google.android.gms.maps.SupportMapFragment" 

在我的地圖XML文件。 希望這會幫助某人

+0

'class'或'name'是可以互換的 – Blundell 2014-09-12 18:51:09