expo - 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 链接确实有人遇到了这个问题。任何想法如何甚至调试这个?
解决方案
我们刚刚删除了除地图之外的所有内容,包括删除标记 - 它有效。我们发现问题仅在我们添加带有坐标的标记时才会发生,我们通过将坐标传递给地图在新的全新 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}
没有更多的崩溃...
推荐阅读
- c++ - 内联变量被多次初始化
- mongodb - Mongo $set 在更新时删除对象中的其他字段
- bash - Correct way to use Linux commands in bash script
- css - Making a responsive word box
- r - How to plot two different y value in ggplot?
- django - Retrieving pk from filtered Django QuerySet
- ethereum - How to use older solc compilers with Truffle
- postgresql - 如何在 postgres 函数中运行合并表
- java - 具有依赖项的 Gradle 自定义插件 jar
- ios - IOS Why Unit Test a class calls ViewController