Android应用无法向Firebase Firestore保存数据求助
问题排查与修复方案
1. 修正任务监听逻辑
你代码里同时加了addOnSuccessListener、addOnFailureListener和addOnCompleteListener,但addOnCompleteListener会在任务结束(不管成功失败)时强制触发,直接覆盖了成功/失败的Toast提示,导致你看不到真实的执行结果。
修改监听逻辑,只保留成功和失败监听即可:
db.collection("Journal") .document("First Thoughts") .set(data) .addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void unused) { Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_LONG).show(); Log.d(TAG, "数据保存成功"); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.e(TAG, "数据保存失败: " + e.getMessage(), e); Toast.makeText(MainActivity.this, "保存失败: " + e.getMessage(), Toast.LENGTH_LONG).show(); } });
2. 检查Firestore安全规则
默认的Firestore安全规则只允许已认证用户读写数据,如果你的应用没做用户登录,写操作会被静默拒绝(不会在客户端弹出明显错误)。
打开Firebase控制台的Firestore页面,进入「规则」标签,临时修改规则为允许所有读写(仅用于测试,上线前必须改回安全规则):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
发布规则后重新测试数据写入。
3. 移除冗余的Firebase初始化代码
现在Firebase SDK会自动在应用启动时初始化,不需要手动调用FirebaseApp.initializeApp(this),删掉这行代码避免潜在冲突。
4. 验证视图绑定是否正确
确保布局文件activity_main.xml里的控件ID和代码里的findViewById调用完全匹配:
- 按钮ID是
save_button - 标题输入框ID是
edit_text_title - 想法输入框ID是
edit_text_thoughts
如果ID不匹配,按钮点击监听根本不会触发,自然不会执行数据写入逻辑。
5. 确认依赖配置正确
检查app/build.gradle里是否正确添加了Firestore依赖:
dependencies { // Firebase Firestore(使用最新版本) implementation 'com.google.firebase:firebase-firestore:24.10.3' // 核心依赖 implementation 'com.google.firebase:firebase-core:21.1.1' }
同步Gradle后重新编译应用。
内容的提问来源于stack exchange,提问作者Tikkar
相关产品推荐
相关产品推荐

