React Native的Image.getSize安卓正常iOS空URI场景报错如何解决
问题原因
- React Native 安卓与iOS双端对
Image.getSize方法的入参校验逻辑实现不一致:安卓端传入空字符串uri会正常触发错误回调,不会抛出全局异常;但iOS端的原生实现层会在执行逻辑前先校验uri合法性,一旦检测到uri为空字符串,会直接抛出source.uri should not be an empty string异常,不会进入你定义的错误回调函数。 - 你现有代码中
uri && uri的写法无法对空字符串做有效兜底:空字符串属于falsy值,该表达式返回结果仍为空字符串,还是会传入非法值触发校验失败。 - 现有代码使用
await调用Image.getSize但未做异常捕获,iOS端抛出的异常无法被你定义的错误回调接收,会直接暴露为运行时错误。
修复方案
你可以通过两步处理兼容双端表现:
- 调用方法前先校验uri合法性,仅当uri为有效值时才调用
Image.getSize,无效值直接按图片不存在逻辑处理 - 用
try/catch包裹调用逻辑,捕获iOS端可能抛出的校验异常,统一走错误处理逻辑
修复后参考代码:
// 先校验uri有效性,空字符串/undefined/null都视为无效 if (!uri) { num_messing_files++; // 直接走图片不存在的处理逻辑 } else { try { await Image.getSize( uri, async (width, height) => { //success //image still exist in the gallery exist = true; }, (error) => { num_messing_files++; // Failed // image do no exist any more in the gallery } ); } catch (e) { // 捕获iOS端uri校验抛出的异常,统一走错误逻辑 num_messing_files++; } }
内容的提问来源于stack exchange,提问作者G.lamjed
相关产品推荐
相关产品推荐

