登录Firebase后如何上传用户头像 按手机号为用户ID存储URL不覆盖数据
问题原因
- 你的代码使用了
setValue()方法写入Firebase实时数据库,该方法会全量覆盖目标节点下的所有原有内容,而非仅更新指定字段 - 写入路径直接指向
UserProfiles根节点,没有定位到对应手机号的用户子节点,操作范围错误导致用户数据被全量覆盖
修正代码
找到onActivityResult回调中获取图片下载URL后的数据库写入逻辑,替换为以下代码:
Imagename.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { // 定位到对应手机号的用户子节点 DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("UserProfiles").child(FullNumber); HashMap<String, Object> updateMap = new HashMap<>(); updateMap.put("ProfileImage", uri.toString()); // 仅更新指定字段,不覆盖其他数据 userRef.updateChildren(updateMap).addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void unused) { Toast.makeText(ProfilePicChange.this, "上传完成", Toast.LENGTH_SHORT).show(); } }); } });
修改说明
- 追加
.child(FullNumber)将写入路径定位到UserProfiles/[用户手机号]节点,符合你用手机号作为用户ID的存储需求 - 用
updateChildren()替代setValue(),该方法只会更新你传入的ProfileImage字段,不会改动该用户节点下其他已有的数据
内容的提问来源于stack exchange,提问作者Forrukh Ahmed
相关产品推荐
相关产品推荐

