我在 onStart() 方法上得到 map object null

I get map object null on onStart() method

我在打开我的片段时尝试添加标记,所以在 onMap Ready 函数中我分配了我的地图并调用了地图 onStart() 方法但我得到了 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));
}

此外,我知道 addMarker 已被弃用,但这是一个示例,我会修复它。

最后是我的错误

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.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)

您根本无法确定 onMapReady 会在 Activity 的生命周期回调函数被调用之前被调用(例如 onStartonResume)。地图初始化是异步操作,因此您必须传递回调以在准备就绪时获取信息(就像方法说的那样)。你应该在 onMapReady

中初始化你的标记

好吧,我解决了我的问题我实现了我的片段OnMapReadyCallback

并覆盖了它,但我认为在片段中不起作用,所以我删除了 OnMapReadyCallback 并在 getMapAsync 方法

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