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

Android模拟器使用Firebase Storage模拟器出现Connection Refused错误如何解决

问题诱因
  • 核心诱因是Firebase Storage模拟器的getDownloadURL()方法默认返回的URL主机名固定为localhost,安卓模拟器中的localhost指向模拟器自身环回地址,而非运行模拟器的宿主机,因此无法正常访问宿主机上的Storage模拟器服务。你在本地浏览器可以正常访问,是因为浏览器运行在宿主机上,localhost对应宿主机本身。
  • cached_network_image包会直接使用拿到的下载URL发起请求,不会自动识别安卓模拟器环境替换主机名,因此会直接请求错误的地址触发连接拒绝错误。
  • 其他可能的次要诱因:Storage模拟器启动时仅绑定了127.0.0.1接口,没有允许外部设备访问;安卓模拟器网络配置异常无法访问宿主机。
解决方案
  1. 调整模拟器启动参数
    启动Firebase Emulator Suite时添加--host 0.0.0.0参数,确保Storage模拟器监听所有网络接口,允许来自安卓模拟器等外部设备的访问:
firebase emulators:start --host 0.0.0.0
  1. 手动替换下载URL的主机名
    在调用getDownloadURL()获取到地址后,判断当前为模拟器环境时,手动将URL中的localhost替换为适配当前平台的宿主机地址,示例代码如下:
Future<String> getAdjustedStorageUrl(Reference ref) async {
  String rawUrl = await ref.getDownloadURL();
  if (USE_EMULATOR) {
    final localHost = Platform.isAndroid ? '10.0.2.2' : 'localhost';
    rawUrl = rawUrl.replaceFirst('http://localhost', 'http://$localHost');
  }
  return rawUrl;
}

后续将调整后的URL传给cached_network_image即可正常加载。
3. 可选校验项

  • 确认你使用的firebase_storage依赖已升级到最新稳定版,排除旧版本SDK本身的模拟器适配bug。
  • 确认安卓模拟器网络正常,可以尝试在模拟器内置浏览器中访问http://10.0.2.2:9199验证是否能打开Storage模拟器的欢迎页面。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:09:02