您好我正在尝试更新部分用户数据用户名和密码
下面的代码检查当前用户的电子邮件是否存在(如果存在)我想用新信息更新旧信息,但我的代码不起作用,它为我添加了一个新用户而不是更新用户数据
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressBar.setVisibility(View.VISIBLE);
updateUser();
}
});
private void updateUser() {
final DatabaseReference mUser = mDatabase.child("users").child("id");
mUser.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
User user = postSnapshot.getValue(User.class);
assert user != null;
String emailUser = user.getEmail();
if (email.equals(emailUser)) {
user.setUsername(name.getText().toString());
user.setPassword(newpassword.getText().toString());
user.setImageBase64(imageBase64);
mUser.setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getActivity(), "Votre compte a été modifé!", Toast.LENGTH_LONG).show();
startActivity(new Intent(getActivity(), LoginActivity.class));
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
答案 0 :(得分:0)
您正在致电updateUser("id");
。您可能希望将其称为updateUser(id);
答案 1 :(得分:0)
当您使用以下代码行时:
mUser.setValue(user)
这意味着您要在users/id
下添加新用户,但这并不意味着您要更新该特定用户。为了更新用户对象中的值,我建议您使用Map
这样的代码:
Map<String, Object> map = new HashMap<>();
map.put("password", newpassword.getText().toString());
mUser.child("-L7vu-6HqcC_YJW40fYa").updateChildren(map);
正如您所看到的,我使用了updateChildren()
方法而不是setValue()
,而且我还添加了您的参考文献中缺少的子项。