2015-01-16 7 views
1

Так я просто создал новый Google Maps деятельности, и это дает мне исключения нулевого указателя, если я пытаюсь запустить мое приложениеAndroid setUpMapIfNeeded(); дает нулевой указатель исключение

private GoogleMap mMap; // Might be null if Google Play services APK is not available. 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setUpMapIfNeeded(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    setUpMapIfNeeded(); 
} 

private void setUpMap() { 
    mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
} 

private void setUpMapIfNeeded() { 
    // Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     // Check if we were successful in obtaining the map. 
     if (mMap != null) { 
      setUpMap(); 
     } 
    } 
} 

это мой макет

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/map" 
tools:context="android.ehb.be.lab4sqlliteex.MapsActivity" 
android:name="com.google.android.gms.maps.SupportMapFragment"/> 

это просто автогенерируется андроид-студией, когда я добавил свою активность. Мой класс расширяет FragmentActivity

это мой файл манифеста

<?xml version="1.0" encoding="utf-8"?> 

<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"/> 
<!-- The ACCESS_COARSE/FINE_LOCATION permissions are not required to use 
    Google Maps Android API v2, but are recommended. --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/google_maps_key"/> 


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

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

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="AIzaSyBxMzLA6jjVtPQEHOrOPTRzKnjPu6bKKGA" 
    /> 
    <activity 
     android:name="android.ehb.be.lab4sqlliteex.MapsActivity" 
     android:label="@string/title_activity_maps"> 
    </activity> 
    <activity 
     android:name=".BucketListActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".AlbumsActivity" 
     android:label="Albums" 
     android:parentActivityName=".BucketListActivity"> 

    </activity> 
</application> 

Любой идея, как это исправить?

Это ошибка, я получаю:

java.lang.RuntimeException: Unable to start activity ComponentInfo{android.ehb.be.lab4sqlliteex/android.ehb.be.lab4sqlliteex.MapsActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641) 
     at android.app.ActivityThread.access$800(ActivityThread.java:156) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:157) 
     at android.app.ActivityThread.main(ActivityThread.java:5867) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
     at android.ehb.be.lab4sqlliteex.MapsActivity.setUpMapIfNeeded(MapsActivity.java:46) 
     at android.ehb.be.lab4sqlliteex.MapsActivity.onCreate(MapsActivity.java:18) 
+0

Опубликуйте свой макет, содержащий фрагмент карты. Кроме того, какой класс активности вы расширяете? – Simas

+0

Я обновил свой вопрос – Brent

+0

Что бросает NPE? 'GetSupportFragmentManager()'? Отправьте свою ошибку. – Simas

ответ

1

Вам нужно позвонить в OnCreate(): setContentView (R.layout.main_layout).

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 
    setUpMapIfNeeded(); 
} 
1

Пожалуйста, убедитесь, что вы расширяете ActionBarActivity

общественного класса CONTACT_US расширяет ActionBarActivity { частное GoogleMap MMAP;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.contact_us); 
    setUpMapIfNeeded(); 
} 
Смежные вопросы