ArcGIS地图在android ViewPager2下崩溃

问题描述 投票:0回答:1

亲爱的StackOverflow社区!

我的问题可能是菜鸟,我觉得我缺少一些非常基本的东西。我试图使ArcGIS地图在android ViewPager2结构下工作。该地图显示得很好,但是当我导航到视图分页器中的另一个片段,然后返回到地图时,应用程序崩溃,但出现以下异常。

com.esri.arcgisruntime.ArcGISRuntimeException: vector: 
/home/jenkins/100.7.0/dev_android_java_RTCA_release/runtimecore/c_api/src/mapping/map_view/geo_view.cpp(701) : error : Exception caught in __FUNCTION__
    at com.esri.arcgisruntime.internal.jni.CoreGeoView.nativeDraw(Native Method)
    at com.esri.arcgisruntime.internal.jni.CoreGeoView.a(SourceFile:346)
    at com.esri.arcgisruntime.internal.h.b.o.a(SourceFile:132)
    at com.esri.arcgisruntime.mapping.view.MapView.onDrawFrame(SourceFile:156)
    at com.esri.arcgisruntime.mapping.view.GeoView$b.onDrawFrame(SourceFile:1363)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1573)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1272)

这似乎在每次调用包含MapView的Fragment的onResume()方法时发生。在此功能(即onResume())中,如本演练中所示,我在MapView实例上手动调用了onResume():

https://developers.arcgis.com/labs/android/create-a-starter-app/

[我将代码中有问题的部分提取到测试应用程序中,我删除了所有图层,现在它只是一个空应用程序中的空底图(在视图分页器结构下),并且崩溃仍然存在。

之所以认为该问题可以与ViewPager2相连是因为在该应用的早期版本中,我使用了不同的导航结构而不使用视图分页器,并且地图运行正常。

我的实际代码与上面的演练之间的区别在于,当我使用视图分页器时,它将MapView直接置于MainActivity下,而将其放在一个片段中。

对我来说,这还不是很清楚,是否仍然需要在片段类或主要活动下放置适当的onPause(),onResume(),onDestroy()调用,所以我都尝试了这两种方法(您可以在下面的代码),我还尝试了完全删除这些覆盖功能。在每种情况下都例外。

这里是构建视图页面的测试应用程序MainActivity类。

class MainActivity : AppCompatActivity() {

    private lateinit var adapter: ViewPagerFragmentAdapter
    private lateinit var viewPager: ViewPager2

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        adapter = ViewPagerFragmentAdapter(supportFragmentManager, lifecycle)
        viewPager = findViewById(R.id.view_pager)
        viewPager.adapter = adapter
    }
}

和MapFragment类。

class MapFragment: Fragment() {

    lateinit var mMapView: MapView

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_map, container, false)

        ArcGISRuntimeEnvironment.setLicense(resources.getString(R.string.arcgis_license_key))
        mMapView = view.findViewById(R.id.map_view)

        val basemapType = Basemap.Type.IMAGERY_WITH_LABELS
        val latitude = 48.0166175
        val longitude = 19.0339708
        val levelOfDetail = 2
        mMapView.map = ArcGISMap(basemapType, latitude, longitude, levelOfDetail)

        return view
    }

    override fun onPause() {
        if (mMapView != null) {
            mMapView.pause()
        }
        super.onPause()
    }

    override fun onResume() {
        super.onResume()
        if (mMapView != null) {
            mMapView.resume()
        }
    }

    override fun onDestroy() {
        if (mMapView != null) {
            mMapView.dispose()
        }
        super.onDestroy()
    }
}

您能给我任何我可能会出错的地方的指示吗?

非常感谢您的任何提前帮助!

标记

android kotlin exception arcgis android-viewpager2
1个回答
1
投票

对于遇到此类问题的任何人,请始终先检查您的依赖项:)

就我而言,ESRI库已过时。当我从过时的依赖关系切换时:

dependencies {
    ...
    implementation 'com.esri.arcgisruntime:arcgis-android:100.7.0'
    ...
}

至最新版本:

dependencies {
    ...
    implementation 'com.esri.arcgisruntime:arcgis-android:100.8.0'
    ...
}

异常消失,应用程序按预期运行。

© www.soinside.com 2019 - 2024. All rights reserved.