2017-03-07 5 views
3

Firebaseデータベースからキーを使用して要素を取得しようとしました。私はクラスUserを持っていて、ユーザーはデータベースに存在します。キーでファイヤーベースで要素を取得

1

は、私はこの方法でそのキーを使用してオブジェクトのユーザーを取得したい:

public User getConnectedUserByUId(final String uid){ 
    DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
    DatabaseReference ref = database.child("users"); 
    final List<User> connectedUser= new ArrayList<User>(); 
    ref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot item: dataSnapshot.getChildren()) { 
       if (item.getKey()==uid) 
       { 
        User user= dataSnapshot.getValue(User.class); 
        connectedUser.add(user); 
       } 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 

    }); 
    return connectedUser.get(0); 
} 

を、それは毎回、空のリストを返します。

+0

使用 'item.getKey()のequals(UID)'代わりに。 – Journey

答えて

0

ここでは、変更されたデータのIDのみを確認します。代わりに、filterByKeyでFirebase Queryを使用して、それを達成するために独自の関数を使用しないでください。あなたが比較しているので、

if (item.getKey()==uid) 

ここFirebaseマニュアルで指定されたよう
DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference ref = database.child("users"); 
Query connectedUser = ref.equalTo(uid); 
connectedUser.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 
      // TODO: handle the post here 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
     // ... 
    } 
}); 

https://firebase.google.com/docs/database/android/lists-of-data#filtering_data

1

問題はここにあるここで私はあなたの機能を交換しようとするために使用するサンプルコードを示します。 2 String in java のメソッド string.equals(Object other)は、==の演算子ではありません。

また、Firebaseのデータのキーを知っているので、すべての子を循環せずに参照を取得するために使用できます。以下のような
何か:。

DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference ref = database.child("users").child(uid);