2017-05-04 11 views
0

Ich versuche, es in Datenbank mit einer addListenerForSingleValueEvent-Methode zu überprüfen, aber wenn ich den Code debuggen wird der Listener übersprungen, das ist mein Code des Listeners.Überprüfen Sie, ob Benutzer in Firebase-Datenbank vorhanden ist

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(); 
          } 
         }); 
        } 

Ich weiß nicht, warum seine übersprungenen, ich brauche etwas, das ich überprüfen lassen, wenn ein Benutzer vorhanden ist, wenn der Benutzer eine neue username.This zu registrieren versucht, ist der Datenbaum:

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

Antwort

2

Ihre DatabaseReference ist falsch. Bitte ändern Sie diese Zeile:

mUsersReference = mTheReference.child("Users"); 

mit

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

In dem userId die eindeutige ID des push() Verfahren erzeugt wird.

Ich hoffe, es hilft.

+1

Während OP in der Tat in der Tat tiefer hören sollte, ist das nicht die Ursache des Problems im Code. Es verbindet einen Wert Listener und Schleifen über die Kinder. Obwohl es verschwenderisch war, würde es funktionieren. –

Verwandte Themen