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

求助:无法通过保存按钮将条目写入Firebase Firestore

Firestore保存条目失败排查与修复

点击保存按钮无法将条目存入Firebase Firestore,始终弹出「Failed while adding detail」提示。相关代码如下:

btn_saveentry.setOnClickListener( (v)-> saveEntry());
    }
void saveEntry(){
        String material=materialEditText.getText().toString();
        String item=itemEditText.getText().toString();
        String date=dateEditText.getText().toString();
        String note=noteEditText.getText().toString();
        Detail detail = new Detail();
        detail.setMaterial(material);
        detail.setItem(item);
        detail.setDate(date);
        detail.setNote(note);
        saveEntryToFirebase(detail);
    }
void saveEntryToFirebase(Detail detail){
        DocumentReference documentReference;
        documentReference = Utility.getCollectionReferenceForDetails().document();

        documentReference.set(detail).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if(task.isSuccessful()) {
                    //detail is added
                    Utility.showToast(TrackerDetailActivity.this,"Detail added successfully");
                    finish();
                }else{
                    Utility.showToast(TrackerDetailActivity.this,"Failed while added detail");
                }
            }
        });
    }

排查步骤与修复方案

1. 先获取具体错误信息

当前代码仅提示失败,无具体错误详情,建议在失败分支添加日志打印,定位问题根源:

void saveEntryToFirebase(Detail detail){
    DocumentReference documentReference = Utility.getCollectionReferenceForDetails().document();

    documentReference.set(detail).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if(task.isSuccessful()) {
                Utility.showToast(TrackerDetailActivity.this,"Detail added successfully");
                finish();
            }else{
                // 打印错误详情
                if(task.getException() != null){
                    Log.e("FirebaseSaveError", "保存失败原因: " + task.getException().getMessage());
                }
                Utility.showToast(TrackerDetailActivity.this,"Failed while adding detail");
            }
        }
    });
}

运行后查看Logcat中的FirebaseSaveError标签,即可获取具体错误原因(如权限不足、类序列化问题等)。

2. 常见问题修复

  • Firestore安全规则限制
    检查Firebase控制台的Firestore安全规则,默认规则可能禁止未认证用户写入。测试阶段可临时设置开放规则(上线后务必改回严格权限):

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }
    
  • Detail类不符合序列化要求
    Firestore要求实体类满足JavaBean规范:

    • 必须包含无参构造函数(public Detail() {})
    • 所有属性需对应getter方法(如public String getMaterial())
    • 属性类型需与Firestore支持类型匹配(String、Long、Boolean等,避免未序列化的自定义类型)
  • 集合引用路径错误
    检查Utility.getCollectionReferenceForDetails()返回的集合路径是否正确,确保与Firebase控制台中创建的集合名称完全一致(注意大小写)。

  • 网络连接问题
    确认测试设备/模拟器处于联网状态,Firestore写入操作依赖网络支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:57:34