更新用户的数据Firebase数据库

时间:2018-03-19 01:45:23

标签: java android firebase firebase-realtime-database

您好我正在尝试更新部分用户数据用户名密码

enter image description here

下面的代码检查当前用户的电子邮件是否存在(如果存在)我想用新信息更新旧信息,但我的代码不起作用,它为我添加了一个新用户而不是更新用户数据

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) {

            }
        });
    }

2 个答案:

答案 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(),而且我还添加了您的参考文献中缺少的子项。