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
。我尝试了所有方法都没有效果。
当您对 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)) {
...