2017-05-04 182 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應該在樹中聽低一些,但這不是代碼中問題的原因。它附加了一個值監聽器並循環了這些孩子。雖然浪費,它會起作用。 –

相關問題