2014-03-03 86 views
2

我得到的NullPointerException在初始化的GoogleMap,NullPointerException异常Android中的GoogleMap

以下是我的代码:

public class MapActivity extends FragmentActivity { 

    private GoogleMap mapa = null; 
    private double lat, lng; 
    private double oldlat, oldlng; 
    private String titulo; 
    private boolean marcador; 

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

     mapa = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 

     lat = 0; 
     lng = 0; 
     oldlat = 0; 
     oldlng = 0; 
     marcador = false; 

     mapa.setOnMapClickListener(new OnMapClickListener() { 
      public void onMapClick(LatLng point) { 
       Projection proj = mapa.getProjection(); 
       Point coord = proj.toScreenLocation(point); 

       Toast.makeText(
         MapActivity.this, 
         "Estás en :\n" + 
         "Lat: " + point.latitude + "\n" + 
         "Lng: " + point.longitude + "\n" + 
         "X: " + coord.x + " - Y: " + coord.y, 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     mapa.setOnCameraChangeListener(new OnCameraChangeListener() { 
      public void onCameraChange(CameraPosition position) { 
        lat = position.target.latitude; 
        lng = position.target.longitude; 
      } 
     }); 

     mapa.setOnMarkerClickListener(new OnMarkerClickListener() { 
      public boolean onMarkerClick(Marker marker) { 
       Toast.makeText(
         MapActivity.this, marker.getTitle(), 
         Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 

    } 

API密钥是好写的,异常是在这条线......

mapa = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 

And AndroidManifest很不错,像布局:

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

AndroidManifest.xml中

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

    <uses-feature android:glEsVersion="0x00020000" 
      android:required="true"/> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

<application 
    [...] 
    <meta-data android:name="com.google.android.maps.v2.API_KEY" 
      android:value="AIzaSyAwfktd5wjjUPaf4cCxQzP3IKZxiTNTiwc"/> 
     <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
     <uses-library android:name="com.google.android.maps" /> 
</application> 
</manifest> 

回答

2

我在XML的看法是这样的,它工作不MapFragment但SupportMapFragment

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

变化

mapa = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

mapa = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

您正在使用地图片段不支持地图片段。

+0

'公共类MapActivity扩展FragmentActivity',他使用v4支持库并需要使用getSupportFragmentManager()方法。 –

+0

啊..好吧..我一般会用MapFragment去。我想JRowen的上述答案应该可以解决问题。我同意,要使用MapFragment,他应该从Activity扩展而不是FragmentAcitivity。 –

相关问题