JNI 检测到应用程序错误:Mapbox android SDK 中的空指针

JNI DETECTED ERROR IN APPLICATION: Null pointer in Mapbox android SDK

我使用的是 mapbox sdk 6.3.0。我可以向地图添加一个多边形,并允许用户通过更改要素来拖动它,然后按如下方式更新要素集合:

features.set(features.indexOf(oldFeature), newFeature);
symbolsSource.setGeoJson(symbolsCollection);

一切正常。

然后我尝试将SDK从6.3.0更新到7.3.0 然后在拖动时突然发生以下崩溃(间歇性但很频繁)

2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] JNI DETECTED ERROR IN APPLICATION: can't call java.lang.String com.mapbox.geojson.Feature.id() on null object 2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] in call to CallObjectMethodV 2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] "Thread-2368" prio=10 tid=65 Runnable 2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | group="main" sCount=0 dsCount=0 flags=0 obj=0x1b740000 self=0x763d1b6800 2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | sysTid=24204 nice=-10 cgrp=default sched=0/0 handle=0x76385da4f0 2019-04-29 17:58:03.120 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | state=R schedstat=( 1253639661 195250540 1454 ) utm=117 stm=8 core=7 HZ=100 2019-04-29 17:58:03.120 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | stack=0x76384df000-0x76384e1000 stackSize=1009KB 2019-04-29 17:58:03.120 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | held mutexes= "mutator lock"(shared held)....

没有日志指向我的代码中的任何一点。 我希望这可能是 Mapbox SDK 的问题,因为 当我恢复到 6.3.0 时它工作正常。我无法查明实际问题。有人能告诉我如何实际调试这样的崩溃吗?

如果我需要提供更多信息,请告诉我。

提前致谢。

编辑:这不是 nullpointer 的副本,因为我的代码没有发生这种情况。正如您从日志中看到的那样,它发生在 Mapbox sdk 内部。另请注意,抛出的错误是 JNI 错误。

我在 Mapbox SDK 中提出了一个问题,他们为我提供了解决此问题的方法。

拖动时,不要像这样直接设置geojson

symbolsSource.setGeoJson(symbolsCollection);

我们应该这样设置:

symbolsSource.setGeoJson(FeatureCollection.fromFeatures(new ArrayList<>(symbolsCollection.features())));

他们也更新了 SDK。查看 here 问题。