如何比较我在 android studio 上创建的字符串与保存在 Firebase 上的变量

问题描述 投票:0回答:1

我的 Firebase 为每个用户保存了 4 个功能:姓名、电子邮件、密码和确认密码。 用户类别:

    public class Users
{
    String Username,Email,Password,ConfirmPassword;

    public Users() {
    }
    public Users(String username, String email, String password, String confirmPassword) {
        Username = username;
        Email = email;
        Password = password;
        ConfirmPassword = confirmPassword;
    }

    public String getUsername() {
        return Username;
    }

    public void setUsername(String username) {
        Username = username;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public String getConfirmPassword() {
        return ConfirmPassword;
    }

    public void setConformPassword(String conformPassword) {
        ConfirmPassword = conformPassword;
    }


}

我保存的 Firebase 数据:

    {
  "user": {
    "user22": {
      "confirmPassword": "12345678",
      "email": "[email protected]",
      "password": "12345678",
      "username": "user22"
    }
  }
}

在我的应用程序中,我可以选择将当前密码更改为新密码,它要求您输入以前的密码(Firebase 保存的当前密码),然后输入新密码(用户将有关密码的数据放在 UI 'EditText 上) ')。 看看这里它的样子: enter image description here

然后用户必须单击“确认按钮”将旧密码更改为新密码。但是在更改之前,计算机需要检查旧密码是否与 Firebase 上保存的当前密码进行比较。I不知道该怎么做,请帮助我!!

我尝试执行该代码,但不确定是否可以获得我想要的变量的访问权限:

public void showUserName()
{
    FirebaseDatabase Data= FirebaseDatabase.getInstance();
    DatabaseReference myRef=Data.getReference("user");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                username.setText(snapshot.child("username").getValue(String.class));
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

}

即使上一个通道与当前通道没有比较,它也总是会改变..

java firebase android-studio firebase-realtime-database
1个回答
0
投票

要检查字段中的特定值,无需附加持久侦听器,只需执行 Query#get() 调用即可。

因此假设您有两个 EditText 对象:

EditText previousPasswordEditText = findViewById(R.id.previous_password_edit_text);
EditText newPasswordEditText = findViewById(new_password_edit_text);

要根据用户在

password
内输入的值检查数据库中存在的
previousPasswordEditText
字段的值,然后才使用在
newPasswordEditText
内输入的新密码执行更新,请使用以下代码行:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = db.child("user").child("user22");
userRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            DataSnapshot userSnapshot = task.getResult();
            String oldPassword = userSnapshot.child("password").getValue(String.class);
             String previousPassword = previousPasswordEditText.getText().toString();
             String newPassword = newPasswordEditText.getText().toString();
             if (oldPassword.equals(previousPassword)) {
                 Map<String, Object> updatePassword = new HashMap<>();
                 updatePassword.put("password", newPassword);
                 userSnapshot.getRef().updateChildren(updatePassword).addOnCompleteListener(new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> updateTask) {
                         if (updateTask.isSuccessful()) {
                             Log.d("TAG", "Update successful!");
                         } else {
                             Log.d("TAG", "Failed with: " + updateTask.getException().getMessage());
                         }
                     }
                 });
             } else {
                 Log.d("TAG", "The oldPassword and the previousPassword don't match!");
             }
        }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.