首页 > 解决方案 > Expo独立Android中最近的MapView问题

问题描述

这是一个新问题,似乎与谷歌地图 API 有关 - 对我们来说是无处不在的。这似乎是不可能的,但我们的生产应用程序突然开始在我们的启动屏幕上抛出一个偶尔的错误。我们的启动屏幕主要是一个谷歌地图,它是 MapView for expo。

Uncaught Error: Error using newLatLngBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view. Either wait until layout has occurre or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map's dimensions.
This only happens on our Android standalone app, through Expo it works fine.

我们遵循了适用于 Android 的文档:https ://docs.expo.io/versions/v34.0.0/workflow/configuration/#android - 我们已经完成了这些步骤。据我们所知,我们已经使用不同的 API 密钥完成了两次该过程,并且得到了相同的结果。

我们已经尝试过这里建议的修复,即根据尺寸设置高度和宽度、设置 flex:1 和设置 initialLocation。我们使用 onReady 来调用初始启动方法。似乎没有任何效果。

截至今天,上面的 github 链接确实有人遇到了这个问题。任何想法如何甚至调试这个?

标签: exporeact-native-maps

解决方案


我们刚刚删除了除地图之外的所有内容,包括删除标记 - 它有效。我们发现问题仅在我们添加带有坐标的标记时才会发生,我们通过将坐标传递给地图在新的全新 expo 应用程序上重现了这个问题,这导致它在 Android 上崩溃(大部分时间,但不是全部) 当我们构建和加载 APK 时。通过地图的属性添加标记onReady也不能阻止崩溃。

原来它是一个未记录的方法,称为onLayout,仅在 doc 中引用fitToCoordinates。它提到如果这个函数被提前调用然后它会导致崩溃,你可能需要使用onLayout. 我们从未调用过fitToCoordinates,但显然确实有其他东西MapView。有人把这个问题放在这里

我们将我们的标记创建逻辑从onReady移到onLayout并且它起作用了。

      <MapView
        testID="map"
        style={{flex: 1}}
        onMapReady={this.onMapReady}>
        {this.mapIsReady &&   <Marker
            key={id}
            coordinate={coordinate}/> }
       </MapView>

至:

      <MapView
...
        onLayout={this.onMapReady}

没有更多的崩溃...


推荐阅读