繁体   English   中英

从后台恢复应用后Mapbox SDK崩溃-上下文为null

[英]Crash in Mapbox SDK after resuming app from background - context is null

从后台恢复我的应用后,有时会崩溃:

#0. Crashed: main
       at com.mapbox.mapboxsdk.annotations.IconFactory.getInstance(IconFactory.java:53)
       at com.mydomain.myapp.manager.MapManager.(MapManager.java:68)
       at com.mydomain.myapp.fragment.HomeFragment.onMapReady(HomeFragment.java:547)
       at com.mapbox.mapboxsdk.maps.MapView$MapCallback.onMapReady(MapView.java:943)
       at com.mapbox.mapboxsdk.maps.MapView$MapCallback.access$1000(MapView.java:908)
       at com.mapbox.mapboxsdk.maps.MapView$MapCallback$1.run(MapView.java:926)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6494)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

--

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
       at com.mapbox.mapboxsdk.annotations.IconFactory.getInstance(IconFactory.java:53)
       at com.mydomain.myapp.manager.MapManager.(MapManager.java:68)
       at com.mydomain.myapp.fragment.HomeFragment.onMapReady(HomeFragment.java:547)
       at com.mapbox.mapboxsdk.maps.MapView$MapCallback.onMapReady(MapView.java:943)
       at com.mapbox.mapboxsdk.maps.MapView$MapCallback.access$1000(MapView.java:908)
       at com.mapbox.mapboxsdk.maps.MapView$MapCallback$1.run(MapView.java:926)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6494)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

我的代码:

public class HomeFragment implements OnMapReadyCallback {

  MapView mapView;

  @Override View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    ...
    mapView.onCreate(savedInstanceState);
    mapView.getMapAsync(this);
    ...
  }

  ...

  @Override public void onMapReady(MapboxMap mapboxMap) {
    ...
    IconFactory iconFactory = IconFactory.getInstance(getContext()); <-- ERROR: CONTEXT IS NULL
    ...   
  }
}

平台: Android 7、8

Mapbox SDK版本: com.mapbox.mapboxsdk:mapbox-android-sdk:5.1.5@aar,com.mapbox.mapboxsdk:mapbox-android-services:2.1.3@aar

触发行为的步骤

  1. 开启应用程式
  2. 等一会儿...
  3. 重新打开应用<-有时会崩溃,有时却不会

当您的应用进入后台时,您需要处理生命周期事件-最有可能在Fragment分离后触发onMapReady。

SupportMapFragment是专为您扩展的,如果您不能使用它,则应查看它如何处理生命周期事件(例如onStop和onDestroyView)。

https://github.com/mapbox/mapbox-gl-native/blob/da7759a273c096117e513b249741355865f9af8e/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM