安卓应用内点击卡片时如何修改Firestore中users集合的指定文档?
问题解决方案
核心问题
代码更新不生效的核心原因是调用collRef.document()时没有传入具体的用户文档ID,Firestore无法定位到需要修改的目标文档,操作自然不会生效。
需求是将活动ID存入当前登录用户的文档,通常Firebase的users集合会以用户的UID作为文档ID,需要先通过Firebase Auth获取当前登录用户的UID。
修正代码
前置依赖
请确保应用已经集成了Firebase Auth,且用户处于登录状态。
import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.firestore.FieldValue; // 其他原有导入保持不变 joinBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // 获取当前登录用户 FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser(); // 未登录直接返回,避免空指针 if (currentUser == null) { // 可自行添加提示用户登录的逻辑 return; } String userUid = currentUser.getUid(); FirebaseFirestore rootRef = FirebaseFirestore.getInstance(); // 定位到当前用户对应的文档 DocumentReference userDocRef = rootRef.collection("users").document(userUid); // 场景1:saved_event字段存储单个活动ID,直接覆盖更新 userDocRef.update("saved_event", a.eventDocId) .addOnCompleteListener(task -> { if (task.isSuccessful()) { Log.d(TAG, "活动ID存储成功"); } else { Log.e(TAG, "存储失败: ", task.getException()); } }); // 场景2:saved_event为数组类型,需要存储多个活动ID,使用下方代码替换上面的update逻辑即可 /* userDocRef.update("saved_event", FieldValue.arrayUnion(a.eventDocId)) .addOnCompleteListener(task -> { if (task.isSuccessful()) { Log.d(TAG, "活动ID追加成功"); } else { Log.e(TAG, "存储失败: ", task.getException()); } }); */ } });
参考数据库结构

注意事项
- 如果users集合的文档ID没有使用用户UID作为标识,将
document(userUid)中的参数替换为实际的目标用户文档ID即可 - 请配置对应Firebase安全规则,限制用户只能修改自己的文档,避免数据被非法篡改
内容的提问来源于stack exchange,提问作者PI PI NAN
相关产品推荐
相关产品推荐

