2017-07-29 65 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。

试试吧,你不会后悔的。