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

Firebase Firestore调用update方法时新增数据而非更新问题求助

核心问题排查

  1. 执行更新操作时没有传递目标用户的UID,updateToFireStore方法错误使用当前登录账号(管理员)的UID作为要更新的文档ID,导致要么修改了管理员自身的资料,要么因为目标文档不存在触发报错
  2. 适配器跳转编辑页时仅传递了用户基础信息,未传递用户唯一UID,编辑页无法定位要修改的目标用户
  3. 密码长度校验逻辑缺失return,密码不足8位时仍会继续执行后续的保存/更新逻辑
  4. 客户端使用createUserWithEmailAndPassword创建用户会自动切换当前登录态为新创建的用户,管理员身份创建其他用户的逻辑不适合在客户端直接实现,建议后续迁移到Admin SDK后端实现
  5. 直接修改Firestore中存储的邮箱、密码字段不会同步更新Firebase Auth系统的用户认证信息,用户登录时仍会使用原有认证信息

修复步骤

1. 改造UsersAdapter的updateData方法

你的usersmodel类中必然存储了每个用户的UID字段,先为该类添加getUid()方法获取用户UID,然后修改跳转逻辑传递UID:

public void updateData(int position){
    usersmodel item=mList.get(position);
    Bundle bundle=new Bundle();
    bundle.putString("uId", item.getUid()); // 新增传递目标用户UID
    bundle.putString("uName",item.getfName());
    bundle.putString("uEmail",item.getEmail());
    bundle.putString("uPhone",item.getPhone());
    bundle.putString("uPassword",item.getPassword());
    Intent intent=new Intent(activity,Admin_add.class);
    intent.putExtras(bundle);
    activity.startActivity(intent);
}

2. 改造Admin_add类接收目标用户UID

新增变量存储目标用户UID,在onCreate中接收传递过来的UID:

// 新增变量
private String targetUserId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // 原有初始化逻辑不变
    Bundle bundle=getIntent().getExtras();
    if(bundle!=null){
        mAddBtn.setText("update");
        targetUserId = bundle.getString("uId"); // 接收目标用户UID
        uName=bundle.getString("uName");
        uEmail=bundle.getString("uEmail");
        uPhone=bundle.getString("uPhone");
        uPassword=bundle.getString("uPassword");
        mFullName.setText(uName);
        mPhone.setText(uPhone);
        mEmail.setText(uEmail);
        mPassword.setText(uPassword);
    }else{
        mAddBtn.setText("save");
    }
    // 原有逻辑不变
}

3. 修复updateToFireStore方法

修改更新逻辑使用传递过来的目标用户UID,不要使用当前登录用户的UID:

private void updateToFireStore(String fullname, String email, String password, String phone) {
    // 删掉原有获取当前登录用户UID的代码,使用targetUserId
    fStore.collection("users").document(targetUserId).update("email",email,"Password",password,"fName",fullname,"phone",phone)
    // 原有监听逻辑不变
}

4. 修复密码校验逻辑

在密码长度判断后添加return,避免校验不通过仍执行后续逻辑:

if (password.length() < 8) {
    mPassword.setError("Password must be>=8 characters");
    return; // 新增return终止后续逻辑
}

内容的提问来源于stack exchange,提问作者Xoryy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:15:07