You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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端抛出的异常无法被你定义的错误回调接收,会直接暴露为运行时错误。
修复方案

你可以通过两步处理兼容双端表现:

  1. 调用方法前先校验uri合法性,仅当uri为有效值时才调用Image.getSize,无效值直接按图片不存在逻辑处理
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:27:05