我正在使用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检测到应用程序错误:无法调用java.lang。空对象上的字符串com.mapbox.geojson.Feature.id() 2019-04-29 17:58:03.119 24115-24204 / com.app.fr.dev A / stresponder.de:java_vm_ext.cc:542]调用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可运行 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标志= 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 =默认sched = 0/0句柄= 0x76385da4f0 2019-04-29 17:58:03.120 24115-24204 / com.app.fr.dev A / stresponder.de:java_vm_ext.cc:542] |状态= R schedstat =(1253639661 195250540 1454)utm = 117 stm = 8核心= 7 HZ = 100 2019-04-29 17:58:03.120 24115-24204 / com.app.fr.dev A / stresponder.de:java_vm_ext.cc:542] |堆栈= 0x76384df000-0x76384e1000堆栈大小= 1009KB 2019-04-29 17:58:03.120 24115-24204 / com.app.fr.dev A / stresponder.de:java_vm_ext.cc:542] |保持互斥锁=“ mutator锁定”(共享保持)。...
在我的代码中没有指向任何地方的日志。 我希望这可能是Mapbox SDK的问题,因为当我恢复到6.3.0时,它可以正常工作。我无法查明实际问题。有人可以告诉我如何实际调试此类崩溃吗?
如果要提供更多信息,请告诉我。
谢谢。
编辑:这不是nullpointer的重复,因为这在我的代码中没有发生。正如您从日志中看到的那样,它正在Mapbox SDK内部发生。另外请注意,抛出的错误是JNI错误。
答案 0 :(得分:1)
我在Mapbox SDK中提出了一个问题,他们给了我解决该问题的方法。
拖动时,而不是像这样直接设置geojson
symbolsSource.setGeoJson(symbolsCollection);
我们应该这样设置:
symbolsSource.setGeoJson(FeatureCollection.fromFeatures(new ArrayList<>(symbolsCollection.features())));
他们还更新了SDK。在here中查找问题。