2017-07-29 12 views
2

このコードをデバッグすると、databaseUserのdataSnapshotにはデータベースのUserの値がありますが、オブジェクトuser1には追加されませんでした。すべてnullです。オブジェクトイベントでは値が正常に受け取られるため、わかりません。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を添付すると、その結果が1つのスナップショットに表示されるので、スナップショットにはその結果のリストが含まれます。結果が1つだけの場合でも、スナップショットには1つの結果のリストが含まれます。

あなたのコードは、この「結果のリスト」を考慮に入れません。それは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クラスにセッターを追加する必要があります。

試してみてください。後悔はありません。

関連する問題