2017-05-04 121 views
0

我想用addListenerForSingleValueEvent方法在数据库中检查它,但是当我调试代码时,侦听器被跳过,这是我的侦听器代码。检查用户是否存在于Firebase数据库中

mTheReference = FirebaseDatabase.getInstance().getReference(); 
    mUsersReference = mTheReference.child("Users"); 

    mUsersReference.addListenerForSingleValueEvent(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

           for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
            User post = postSnapshot.getValue(User.class); 
            String username = post.getUsername(); 

            if (username.equals(mUserView.getText().toString())) { 
             alreadyRegisteredAccount++; 
            } 
           } 

         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 
if (alreadyRegisteredAccount != 0) { 
         mUserView.setError("Usuario ya registrado, intenta de nuevo."); 
        } else { 
         User user = new User(); 
         user.setUsername(mUserView.getText().toString()); 
         user.setPassword(mPasswordView.getText().toString()); 
         mUsersReference.push().setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           Toast.makeText(getApplicationContext(), "YAAAY!", Toast.LENGTH_LONG).show(); 
          } 
         }); 
        } 

我不知道为什么它的跳跃,我需要的东西,让一旦用户尝试注册一个新的username.This是数据树我检查用户是否存在:

{ 
users: 
    { 
    -KjGdQAZEfJ-qR5pM0Ko: 
    { 
     username : fmigg 
     password : broxton1 
    } 
    -KjGq7AghI9ftiX6Ih-q: 
    { 
     username : aston 
     password : creative123 
    } 
    } 
} 

回答

2

您的DatabaseReference是错误的。请改变这一行:

mUsersReference = mTheReference.child("Users"); 

mUsersReference = mTheReference.child("Users").child(userId); 

在其userId是由push()方法生成的唯一的ID。

希望它有帮助。

+1

虽然OP应该在树中听低一些,但这不是代码中问题的原因。它附加了一个值监听器并循环了这些孩子。虽然浪费,它会起作用。 –

相关问题