2017-06-29 7 views
0

Ich arbeite an Chat-App für Summerschool. Dies ist meine erste Android-App und wir wurden aufgefordert, die Firebase zu verwenden. Während der Verwendung der integrierten Anmeldung in Firebase ziemlich einfach ist, habe ich gelesen, dass Sie nicht auf die Liste der registrierten Benutzer zugreifen können, also habe ich versucht, das Problem zu umgehen. Ich habe einen anderen Tisch gemacht. Nach der Anmeldung des Benutzers, ich suche in der Tabelle nach seiner E-Mail, wenn es nicht dort ist, wird seine E-Mail (als Spitzname) der Tabelle hinzugefügt. Dann möchte ich den Inhalt der Tabelle verwenden, um Chats mit anderen registrierten Benutzern zu erstellen. Aus irgendwelchen Gründen schiebt meine App das User-Objekt jedoch nicht auf den Firebase, da ich es in der Konsole überprüft habe. Es ist einfach nicht da. Wo ist der Haken? Code tritt immer in den inneren Teil des if ein.App wird nicht Daten in Firebase schieben

Code für den Teil, wo ich es an Firebase sende.

 @Override 
protected void onActivityResult(int requestCode, int resultCode, 
           Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == SIGN_IN_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      Toast.makeText(this, 
        "Successfully signed in. Welcome!", 
        Toast.LENGTH_LONG) 
        .show(); 
      displayChatMessages(); 

      setUserInfo(); 

FirebaseDatabase.getInstance().getReference("server/users").equalTo(FirebaseAuth.getInstance().getCurrentUser().getEmail().toString()).addListenerForSingleValueEvent(
         new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           System.out.println("Am i inside?" + dataSnapshot.hasChildren()); 
           if (!dataSnapshot.hasChildren()) { 
            User user = new User(FirebaseAuth.getInstance().getCurrentUser().getEmail()); 
            FirebaseDatabase.getInstance().getReference("server/users").push().setValue(user); 
            System.out.println("I am at the end. " + FirebaseAuth.getInstance().getCurrentUser().getDisplayName() + " " + FirebaseDatabase.getInstance().getReference("server/users").toString()); 
           } 
          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 
           System.out.println("ERROR: " + databaseError.toString()); 
          } 
         } 
       ); 

      } else { 
       Toast.makeText(this, 
         "We couldn't sign you in. Please try again later.", 
         Toast.LENGTH_LONG) 
         .show(); 

       // Close the app 
       finish(); 
      } 
     } 
} 

Mein Benutzerklasse:

public class User { 
    private String nickName; 
    public User(){} 
    public User(String nickName){ 
    } 
    public String getNickName(){ 
     return nickName; 
    } 
    public void setNickName(String nickName){ 
     this.nickName=nickName; 
    } 
} 

Mit diesem Code, würde Ich mag die Benutzer aus der Feuerbasis zurück zu bekommen:

FirebaseDatabase.getInstance().getReference("server/users").addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) { 
          User user = userSnapshot.getValue(User.class); 
          if (user.getNickName() != FirebaseAuth.getInstance().getCurrentUser().getEmail()) 
           users.add(user); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 

Thanks :)

+0

Können Sie die Datenhierarchie auf Firebase bereitstellen, oder wenn Sie Benutzer durch Code hinzugefügt haben, können Sie uns diesen Teil auch hilfreich zur Verfügung stellen. –

Antwort

0

könnte Sie Versuchen Sie explizit, einen Knoten "Benutzer" in Ihrer Datenbank zu erstellen, und speichern Sie dann alle neuen Benutzer für diesen Knoten. FirebaseDatabase.getInstance(). GetReference(). Child ("Benutzer"). Haschild (email); Überprüfen Sie, ob der Benutzerknoten diese E-Mail hat, wenn nicht ... FirebaseDatabase.getInstance(). GetReference(). Child ("Benutzer"). Child (E-Mail) .setValue (new user()); Und Sie können den Knoten Benutzer nach Bedarf hören.

Verwandte Themen