2017-07-29 67 views
2

當我調試此代碼時,在databaseUser dataSnapshot中有來自用戶在數據庫中的值,但在對象user1中沒有添加,它全爲空。我不明白,因爲在對象事件中正常接收值。如何從dataSnapshot獲取價值?

databaseEvent.child(getKeyEvent()).addListenerForSingleValueEvent( 
     new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       final Event event = dataSnapshot.getValue(Event.class); 
       user = FirebaseAuth.getInstance().getCurrentUser(); 
       if(user != null) { 

        databaseUser.orderByChild("userEmail").equalTo(user.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         if (dataSnapshot.exists()) { 
          //User already exists 
          User user1 = dataSnapshot.getValue(User.class); 
       } 
     } 
}); 

我的數據庫用戶,只爲測試現在:

public class User { 

String userId; 
String userEmail; 
Boolean userHasInterest; 
String eventId; 

public String getUserId() { 
    return userId; 
} 
public String getUserEmail() { 
    return userEmail; 
} 

public Boolean getUserHasInterest() { 
    return userHasInterest; 
} 

public String getEventId() { 
    return eventId; 
} 

public User(String userId, String eventId, String userEmail, Boolean userHasInterest) { 
    this.userId = userId; 
    this.userEmail = userEmail; 
    this.userHasInterest = userHasInterest; 
    this.eventId = eventId; 
} 

與方法,只是挑另一個活動的事件的關鍵:

public String getKeyEvent(){ 
    Intent intent = getIntent(); 
    Bundle bundle = intent.getExtras(); 
    String key = bundle.getString("Evento"); 
    return key; 
} 
+0

添加數據庫結構並說明getKeyEvents()是什麼 –

+0

此代碼是否工作?您在範圍內有'dataSnapshot'重疊的值 –

回答

3

當你執行鍼對Firebase數據庫的查詢,可能會有多個結果。通過附加ValueListener,您可以在一個快照中獲得這些結果,因此快照包含這些結果的列表。即使只有一個結果,快照也會包含一個結果列表。

您的代碼未能考慮到此「結果列表」。這很容易通過循環在DataSnapshot.getChildren()修復:

databaseUser.orderByChild("userEmail").equalTo(user.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
     User user1 = userSnapshot.getValue(User.class); 
-1

我曾經面臨這樣的問題,而解決方案是相當驚人的。

您應該在User類中添加setter。

試試吧,你不會後悔的。