NullPointerException at mapFragment.getMapAsync

扶醉桌前 提交于 2019-12-10 14:59:48

问题


After going through SO questions relating to my title, I couldn't find a solution to the problem. I am having a NullPointerException at mapFragment.getMapAsync. Below is my MapActivity code.

package com.example.jerofad.mylocation;
import android.app.FragmentManager;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements  OnMapReadyCallback {
    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) this.getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        mMap.getUiSettings().setZoomControlsEnabled(true);
    }
}

I am using google play service 8.4.0. My Android Manifest is given below.

<?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>

How can I fix the error at mapFragment.getMapAsync(this). Thanks in advance. Here is the crash Log.

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)

Here is the 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" />

回答1:


Please try this,

Remove/comment SupportMapfragment line for a while and Try this,

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



回答2:


You've two options, One is as Raghavendra told another one is you can change the class attribute

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

to

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

Then your codes will work.




回答3:


U can try this.. it might help...

    @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);
            }
        });
}



回答4:


If this might help anybody..

Add < uses-permission> NETWORK_ACCESS_STATE to your Manifest.



来源:https://stackoverflow.com/questions/36832035/nullpointerexception-at-mapfragment-getmapasync

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!