Firebase Android更新子节点值遇异常:误生成新ID求助
解决Firebase Realtime Database更新子节点时生成新ID的问题
我之前也踩过类似的坑!咱们一步步排查解决你遇到的问题:
先确认用户节点的创建方式
如果你最开始创建userInfos下的用户数据时用了push()方法,Firebase会自动生成随机ID作为节点键,这就会导致你后续用user.getUid()去更新时,找不到对应节点反而创建新的。正确的创建方式应该直接用用户UID作为节点键:// 创建用户节点时直接绑定UID String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("userInfos").child(uid); // 初始化用户数据 userRef.child("vorname").setValue("初始姓名");检查更新代码的语法和路径
你写的代码里有个小语法错误:getReference("userInfos").child(user.getUid();少了闭合的括号,应该是child(user.getUid())。虽然IDE可能会提示,但这种路径错误也可能导致Firebase找不到目标节点,进而自动创建新节点。修正后的更新代码应该是:// 获取当前用户UID(确保用户已登录) String currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid(); // 指向已存在的用户节点 DatabaseReference updateData = FirebaseDatabase.getInstance().getReference("userInfos").child(currentUid); // 更新指定子节点 updateData.child("vorname").setValue(vName);验证数据库结构
登录Firebase控制台查看userInfos的结构,确认每个用户节点的键是不是用户的UID,而不是一串随机字符串。如果之前是用push()生成的随机ID,你需要把数据迁移到以UID为键的节点下(这是更规范的用户数据存储方式),或者调整更新逻辑去匹配那些随机ID(但不推荐)。检查数据库规则权限
确保你的数据库规则允许当前用户更新自己的节点,避免权限不足导致的异常行为。比如设置规则:{ "rules": { "userInfos": { "$uid": { ".write": "$uid === auth.uid", ".read": "$uid === auth.uid" } } } }
内容的提问来源于stack exchange,提问作者revilo
相关产品推荐
相关产品推荐

