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 问题。
我使用的是 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 问题。