4

Après avoir rencontré des questions relatives à mon titre, je n'ai pas trouvé de solution au problème. Je vais avoir un NullPointerException au mapFragment.getMapAsync. Voici mon code MapActivity. J'ai utilisé google play service 8.4.0. Mon manifeste Android est donné ci-dessous.NullPointerException à mapFragment.getMapAsync

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.jerofad.mylocation"> 

<!-- 
    The ACCESS_COARSE/FINE_LOCATION permissions are not required to use 
    Google Maps Android API v2, but you must specify either coarse or fine 
    location permissions for the 'MyLocation' functionality. 
--> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
    android:maxSdkVersion="22"/> 
<permission 
    android:name="com.example.jerofad.mylocation.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.jerofad.mylocation.permission.MAPS_RECEIVE" /> 
<uses-permission 
    android:name="android.permission.READ_EXTERNAL_STORAGE" 
    android:maxSdkVersion="22" /> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/mylocation" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme">   
    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="@string/google_maps_key" /> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    <activity 
     android:name=".MapsActivity" 
     android:label="@string/title_activity_maps"> 

    </activity> 
    <activity 
     android:name=".LauncherActivity" 
     android:label="@string/title_activity_launcher" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Comment puis-je corriger l'erreur à mapFragment.getMapAsync(this). Merci d'avance. Voici le journal de l'accident.

04-25 11:11:49.079 31448-31448/com.example.jerofad.mylocation 
E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.jerofad.mylocation, PID: 31448 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jerofad.mylocation/com.example.jerofad.mylocation.MapsActivity}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
    at android.app.ActivityThread.access$800(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
    at android.os.Handler.dispatchMessage(Handler.java:110) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:5299) 
    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:825) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at com.example.jerofad.mylocation.MapsActivity.onCreate(MapsActivity.java:24) 
    at android.app.Activity.performCreate(Activity.java:5423) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)  
    at android.app.ActivityThread.access$800(ActivityThread.java:151)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)  
    at android.os.Handler.dispatchMessage(Handler.java:110)  
    at android.os.Looper.loop(Looper.java:193)  
    at android.app.ActivityThread.main(ActivityThread.java:5299)  
    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:825)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)  
    at dalvik.system.NativeStart.main(Native Method) 

Voici le fichier activity_maps.xml.

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/map" 
    class ="com.google.android.gms.maps.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.example.jerofad.mylocation.MapsActivity" /> 
+0

Après le crash journal. –

+0

@Shree J'ai ajouté le journal de panne – Jeremiah

+0

Avez-vous essayé 'this.getChildFragmentManager()' au lieu de 'this.getSupportFragmentManager()'. –

Répondre

6

S'il vous plaît essayer ceci,

Supprimer/commentaire ligne SupportMapfragment pendant un certain temps et Essayez ceci,

MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map); 
+1

Deviné sans voir XML et a bien fonctionné, génial 1 pour votre solution. –

+0

@ShreeKrishna :) – Raghavendra

1

U peut essayer .. il pourrait aider ...

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    Log.i("onActivityCreated", "onActivityCreated"); 
    if(supportMapFragment==null){ 
     supportMapFragment = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map); 

     supportMapFragment.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       mGoogleMap = googleMap; 

       loadMapAtPosition(googleMap, CAMERA_INITIAL_LATITUDE, CAMERA_INITIAL_LONGITUDE); 
      } 
     }); 
} 
+0

pouvez-vous expliquer cette ligne de code? 'loadMapAtPosition (googleMap, CAMERA_INITIAL_LATITUDE, CAMERA_INITIAL_LONGITUDE)'. Je ne semble pas obtenir ce que vous essayez de faire ici. – Jeremiah

+1

loadMapAtPosition est la fonction. private void loadMapAtPosition (GoogleMap googleMap, double latitude, double longitude) { googleMap.animateCamera (CameraUpdateFactory.newLatLngZoom (nouveau LatLng (latitude, longitude), 6.0f)); } – Riten

4

Vous avez deux options, l'une est comme Raghavendra dit une autre est que vous pouvez changer l'attribut de classe

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

à

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

Ensuite, vos codes fonctionneront.

1

Si cela peut aider tout le monde ..

Ajouter < utilise-autorisation> NETWORK_ACCESS_STATE à votre Manifest.