使用 DatabaseReference 无法进行实时数据库登录 - Android Studio

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

this is the Firebase store

public void checkUserFromDB(){
    String email = String.valueOf (Email.getText ()).trim ();
    String userPassword = String.valueOf (Password.getText ()).trim ();

    Query query = databaseReference.orderByChild ("email").equalTo (email);
    query.addListenerForSingleValueEvent (new ValueEventListener () {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                Email.setError(null);
                String userPasswordFromDB = snapshot.child("password").getValue(String.class);
                if (!Objects.equals(userPassword, userPasswordFromDB)) {
                    // Password matches
                    Password.setError(null);
                    startActivity(new Intent(getApplicationContext(), Tasks.class));
                    finish();
                } else {
                    // Password doesn't match
                    Password.setError("Password does not match.");
                    Password.requestFocus();
                }
            } else {
                Email.setError("Username aren't exists, please open a new account.");
                Email.requestFocus();
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

当我插入存在的电子邮件和不存在的密码时,它会转到

Tasks.class
- 当我插入时,它也会将我带到
Tasks.class
。我尝试了所有方法都没有效果。

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

当您对 Firebase 数据库执行查询时,可能会出现多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您的代码无法处理该列表,您可以按照监听结果列表的文档中所示执行此操作。在你的情况下,会是这样的:

query.addListenerForSingleValueEvent (new ValueEventListener () {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) { // 👈
        if (dataSnapshot.exists()) {
            for (DataSnapshot snapshot: dataSnapshot.getChildren()) { // 👈
                Email.setError(null);
                String userPasswordFromDB = snapshot.child("password").getValue(String.class);
                if (!Objects.equals(userPassword, userPasswordFromDB)) {
                    ...
© www.soinside.com 2019 - 2024. All rights reserved.