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

安卓应用内点击卡片时如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:06:03