2016-10-07 11 views
0

Firebaseデータベースでクエリパラメータ(Javaの場合)と一致するオブジェクトを取得して返す簡単なクエリを実行する方法はありますか?私はFirebaseの使い方が非常に新しいので、ドキュメントを理解できる限り、orderBy()は無期限に続く非同期メソッドなので、クエリ後にデータを操作する方法を理解できません。すばやく値を取得して返すコールバックの表記法はありますか?または、Firebaseのマニュアルに何か不足していますか?JavaでのFirebaseクエリ/コールバックの終了

たとえば、このメソッドでは、データベースに指定されたユーザーが含まれているかどうかを調べ、クエリがユーザーと一致する場合はtrueを返します。

public void containsUser(String user) { 
     DatabaseReference ref = getDatabaseRef("users"); 
     ref.orderByKey().equalTo("user1").addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       System.out.println(dataSnapshot.getKey()); 
      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s){} 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) {} 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) {} 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       System.out.println(databaseError.getMessage()); 
      } 
     }); 
} 

これを行う簡単な方法はありますか?

答えて

1

単一の値を使用addListenerForSingleValueEvent

DatabaseReference ref = getDatabaseRef("users"); 
ref.child("user1").addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String value = (String) dataSnapshot.getValue(); 

     // do your stuff here with value 

    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

は、このコードは唯一のデータベース内部の構造/情報の変化に応答しません取得するには?私が探しているのは、オブジェクトを1つ取り出してコールバック関数を呼び出す方法です。 – Matt

+0

これは、firebaseのドキュメント(https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query.html#addListenerForSingleValueEvent(com)に従ってデータベースから1つのオブジェクトを取得する適切な方法です。 google.firebase.database.ValueEventListener) – uguboz

+0

また、一度呼び出されてからaddValueEventListenerが呼び出された後は、今後何らかの変更があっても応答しません。 – uguboz

関連する問題