NullPointerException:尝试在空对象上调用虚拟方法'void com.esri.arcgisruntime.internal.jni.CoreDevice.b()'

1921
9
06-22-2021 01:10 am
GeobuzonAplicaciones
新的因素

我在Crashlytics控制台得到这个错误,没有其他信息。

致命异常:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void com.esri.arcgisruntime.internal.jni.CoreDevice.b()'
com.esri.arcgisruntime.mapping.view.GeoView RenderingThread.run美元(源文件:13)

我不知道发生在哪里。我没有更多的消息

我用kotlin和com.esri.arcgisruntime: arcgis-android: 100.11.0

这种错误有时会发生,但不是所有时候

0荣誉
9回复
NicolasElgueta
新贡献者II

您应该在调用中处理空数据,您可以添加一个try catch来处理错误。
如果您可以上传产生错误的代码的摘录。

0荣誉
GeobuzonAplicaciones
新的因素

这个答复和什么都不一样。

0荣誉
RamaChintapalli
Esri贡献者

你好,

我们已经从另一个来源看到了这个错误报告,但经过进一步的调试发现他们的应用程序错误地处理方向变化。在他们的情况下,mapview被发送到后台活动/片段,甚至在实例化mapview之前就被处理掉了。

如果您有任何代码可以分享,它可以帮助我们进一步调试您的情况。您可以使用我们的一个样本,尝试重现您的工作流程并与我们分享。
https://github.com/Esri/arcgis-runtime-samples-android

谢谢
罗摩

0荣誉
GeobuzonAplicaciones
新的因素

你能把那个箱子的链接发过来吗?(查看代码)

0荣誉
JarvanMo
通过
新的因素

@GeobuzonAplicaciones@RamaChintapalli我有百分之百的把握复制这个。我有三个标签,ArcMap标签在这些标签的末尾ArcMap和其他地图放在一起。我有一个开关按钮来打开ArcMap可见或不可见。在这种情况下,如果我从不切换到ArcMap并且ArcMap对用户永远不可见,那么我调用

mapSwitcherRootBinding?.arcMapView? .dispose ()

内部

onDestroyView

它必须崩溃,这个异常是JNI崩溃,不能在Kotlin端捕获。我认为一个可能的解决方案是我们能否在处理之前判断它是否被呈现?

Dhruvin
通过
新贡献者II

我可以在100.10.0上重现CoreDevice.c()崩溃

CoreDevice.b()和coredevice .c()看起来像一个是公共的,并从反编译的字节码调用另一个私有函数

我注意到,如果我添加一个检查,只在当前地图已加载时处理,我不会看到崩溃。

虽然这种方法似乎有效,但如果我们不调用dispose,它会在任何特定情况下导致任何泄漏吗?@RamaChintapalli

在LOADING状态下调用dispose似乎会导致崩溃。

瓦尔loadStatus=mapView地图loadStatus
如果loadStatus==LoadStatus加载) {
mapView.dispose ()
}

我还注意到,如果只是在示例应用程序中将ESRI Android API版本更改为100.13.0,我不会看到崩溃。

看起来这个问题已经解决了。有人知道这个bug吗?@RamaChintapalli

RamaChintapalli
Esri贡献者

嗨Dhruvin,
处理前检查地图状态的方法应该是有效的,不会有任何泄漏。同样,这个想法是确保在实例化地图视图之前不调用dispose。

我可以确认,我们在100.13中修复了另一个内部问题的一部分,以保护上述空指针异常被抛出,以防应用程序试图在没有实例化的情况下处理地图视图。

谢谢
罗摩

Dhruvin
通过
新贡献者II

谢谢你的更新@RamaChintapalli。这很有帮助。

你有内部问题的bug #吗?

0荣誉
RamaChintapalli
Esri贡献者

Dhruvin,
这是代码内部重构的一部分。我没有针对它的公开BUG#。

我有一个公开的BUG#: BUG-000141674对于我上面的一个评论repro代码中的片段没有适当地处理方向变化,从而导致相同的空指针异常。

谢谢
罗摩

0荣誉