Search code examples
javaandroidnullpointerexceptionmapboxandroid-lifecycle

I get map object null on onStart() method


I'm trying to addMarker when I open my fragment so in onMap Ready function I assigned my map and I'm calling map onStart() method but I get null

@Override
public void onMapReady(@NonNull MapboxMap mapboxMap) {
    map = mapboxMap;
}

@Override
public void onStart() {
    super.onStart();
    mapView.onStart();
    Bundle args = getArguments();
    if (args != null) {
        System.out.println("MY PATROL => "+args);
        mapboxAddMarker(args.getString("QRResult"));
    }
}

public void mapboxAddMarker(String coords){
    String[] coordArr =coords.split(" ");

    LatLng coord = new LatLng();
    coord.setLatitude(Double.parseDouble(coordArr[0]));
    coord.setLongitude(Double.parseDouble(coordArr[1]));

    map.addMarker(new MarkerOptions().position(coord));
}

Also, I know addMarker is deprecated but it's an example I'll fix it.

Lastly My Error

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.rtets, PID: 10727
    java.lang.NullPointerException: Attempt to invoke virtual method 'com.mapbox.mapboxsdk.annotations.Marker com.mapbox.mapboxsdk.maps.MapboxMap.addMarker(com.mapbox.mapboxsdk.annotations.MarkerOptions)' on a null object reference
        at com.example.rtets.ui.fragments.MyPatrolFragment.mapboxAddMarker(MyPatrolFragment.java:83)
        at com.example.rtets.ui.fragments.MyPatrolFragment.onViewCreated(MyPatrolFragment.java:96)
        at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2987)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:546)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8633)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

Solution

  • Well I solved my problem I implemented my fragment OnMapReadyCallback

    and overridden it but I think in the fragment that does not work so I deleted the OnMapReadyCallback and I wrote OnMapReadyCallback in getMapAsync method

    mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {
                System.out.println("MAP IS OKAY");
            }
        });