Android Googlemaps:未打电话给onmapready



我在AddMarker行上获得NullPoInterException,因为我的mGoogleMap对象未在onMapReady()中进行初始化,尽管我已经打了getMapAsync()

java文件:

    public class RideStart extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener,PlaceSelectionListener,OnMapReadyCallback,LocationListener,GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener
    {

        String phone,username,email,ridetrackingno,GPSstart,GPSend;
        private GoogleMap nMap;
        MapView nmapview;
        GoogleMap mGoogleMap;
        SupportMapFragment mapFrag;
        LocationRequest mLocationRequest;
        GoogleApiClient mGoogleApiClient;
        Location mLastLocation;
        Marker mCurrLocationMarker;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ride_start);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
            setSupportActionBar(toolbar);
            Log.d("Here!!","before initialization" );
            mapFrag= (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
            mapFrag.getMapAsync((OnMapReadyCallback) this);
            Log.d("Here!!","after initialization" );

........//addMarker code --->NULL-POINTER exception bcoz mGooglemap isnt initialized
}
//onCreate ends.
public void onMapReady(GoogleMap googleMap) {
        Log.d("Here!!","in initialization" );
        LatLng sydney = new LatLng(12.843515, 77.663306);
        googleMap.addMarker(new MarkerOptions().position(sydney)
                .title("You are here"));
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
        mGoogleMap=googleMap;
        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    }

}
//class ends

调试语句:清楚地显示"初始化之前"one_answers"之后" 初始化"但在初始化中"永远不会打印。我不能 了解为什么会发生这种情况。

03-26 11:14:41.260 20046-20046/com.example.kulka.cabchain_partner D/Here!!: before initialization
03-26 11:14:41.262 20046-20046/com.example.kulka.cabchain_partner D/Here!!: after initialization
03-26 11:14:41.266 20046-20046/com.example.kulka.cabchain_partner D/AndroidRuntime: Shutting down VM
03-26 11:14:41.267 20046-20046/com.example.kulka.cabchain_partner E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                    Process: com.example.kulka.cabchain_partner, PID: 20046
                                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kulka.cabchain_partner/com.example.kulka.cabchain_partner.RideStart}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference

在ongreate上添加标记始终是指null。

   @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_ride_start);
                Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
                setSupportActionBar(toolbar);

            Log.d("Here!!","before initialization" );
            mapFrag= (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
            mapFrag.getMapAsync((OnMapReadyCallback) this);
            Log.d("Here!!","after initialization" );

}
//onCreate ends.
public void onMapReady(GoogleMap googleMap) {
        Log.d("Here!!","in initialization" );
        LatLng sydney = new LatLng(12.843515, 77.663306);
        googleMap.addMarker(new MarkerOptions().position(sydney)
                .title("You are here"));
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
        mGoogleMap=googleMap;
        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        //make a function for adding marker
    }

}
//class ends

从OnCreate方法中删除标记代码,然后将其放在onMapReady方法下方,或者简单地制作另一种方法并在Onmapready方法的末尾调用。这应该做技巧

最新更新