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

Android应用Firebase Firestore数据无法保存问题求助

解决Firestore报错Status{code=UNAVAILABLE, description=Channel shutdownNow invoked, cause=null}的数据保存问题

以下是针对该报错的逐一排查和解决方案:

  • 统一Firebase依赖版本
    确保Module级别build.gradle中所有Firebase组件版本同步,推荐使用Firebase BOM管理版本,避免版本冲突:

    // 引入Firebase BOM统一管控版本
    implementation platform('com.google.firebase:firebase-bom:32.7.0')
    implementation 'com.google.firebase:firebase-firestore'
    implementation 'com.google.firebase:firebase-core'
    

    不要单独指定Firestore的版本,依赖BOM自动同步所有Firebase组件的兼容版本。

  • 规范Firestore初始化逻辑
    检查MainActivity中Firestore实例的初始化时机,必须在主线程执行,且避免在组件生命周期末期(如onDestroy后)调用:

    // 正确初始化方式,建议在Activity的onCreate中执行
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    

    禁止在非主线程初始化Firestore,或提前销毁Firebase实例。

  • 排查网络环境稳定性
    该报错常与网络连接异常相关:

    • 切换网络环境(WiFi/移动数据),关闭代理工具后重试
    • 模拟器用户可重启模拟器,或检查模拟器的网络连接状态是否正常
  • 验证Firebase配置文件与权限

    • 确认google-services.json是从对应Firebase项目控制台下载的原始文件,包名与项目applicationId完全匹配
    • 检查AndroidManifest.xml中是否添加了必要权限:
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
  • 检查数据写入代码逻辑
    确保写入操作未被异常中断,或提前关闭了Firestore连接:

    // 标准数据写入示例
    Map<String, Object> userData = new HashMap<>();
    userData.put("name", "Test User");
    userData.put("age", 25);
    
    db.collection("users")
            .add(userData)
            .addOnSuccessListener(docRef -> Log.d(TAG, "数据写入成功,ID:" + docRef.getId()))
            .addOnFailureListener(e -> Log.w(TAG, "写入失败", e));
    

    避免在写入过程中调用FirebaseApp.deleteApp()等销毁实例的方法。

  • 临时测试安全规则(仅限排查)
    虽然你已检查过规则,可临时设置测试规则排除权限问题:

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }
    

    测试完成后务必恢复原有安全规则,避免数据泄露风险。

  • 清理缓存并重新构建

    • 执行Android Studio的File > Invalidate Caches... > Invalidate and Restart清理缓存
    • 终端执行./gradlew clean清理构建缓存,再重新编译项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:34:55