Je veux implémenter une carte sur un fragment. Mais quand je l'appelle getMapAsync() donne un NullPointerException:Android Google Maps getMapAsync() donne NullPointer (essayé d'autres suggestions)
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference
at kontrolleur.radar.de.radar.fragment.MapFragment.inOnCreateView(MapFragment.java:33)
MapFragment.class:
public class MapFragment extends BaseFragment implements OnMapReadyCallback {
public static MapFragment create(){
return new MapFragment();
}
@Override
public int getLayoutResId() {
return R.layout.fragment_map;
}
@Override
public void inOnCreateView(View root, @Nullable ViewGroup container, Bundle savedInstanceState) {
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map_container);
mapFragment.getMapAsync(this);
}
private GoogleMap googleMap;
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
}
}
Le fragment établit dans un ViewPager btw.
Voici le fragment_map.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/map_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Mon fichier Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kontrolleur.radar.de.radar">
<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.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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.maps.v2.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=".MainActivity"
android:theme="@style/FullScreenTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
La clé api pose dans le google_maps_api.xml et est valide.
Ce que j'ai essayé:
D'abord, je remplacé le mapFragment par une nouvelle instance de SupportMapFragment. Mais cela n'a pas fonctionné et a mis un écran blanc sur le fragment.
Alors j'ai essayé de mettre le mapFragment.getMapAsync (this); dans différentes méthodes (comme onCreate, onViewCreated etc.). Encore une nullpointerexception.
J'ai aussi remplacé getChildFragmentManager() avec getActivity(). GetFragmentManager().
Ai-je raté quelque chose?
Mon MainActivity étend étend AppCompatActivity et BaseFragment Fragment si c'est une aide.
Je sais ce que NullPointerException est. Mais je ne comprends pas pourquoi le SupportMapFragment ne peut pas être trouvé ou chargé –
voté pour rouvrir parce que cette question ne concerne pas une incompréhension fondamentale de ce qu'est un 'NullPointerException' est plutôt sur les spécificités de pourquoi une certaine variable est nulle dans ce cas particulier. –
@BenP. Je viens de changer la cible de dupe en un doublon exact. –