2017-01-20 3 views
0

私はFirebase Androidでチャットベースアプリを開発しています。同じ結果を得るには2つの方法がありますが、どれがパフォーマンスが良いかを検出することはできません。次のように助けが必要です。Firebase Android:選択したノードをどのように照会するのが良いですか?

DB構造:

Firebase - 
    - User 
      - user id 
       - name 
       - DOB 
       - userId 

私は、選択したキーのユーザ情報を取得する必要があります。以下のように2通りの方法があります。

  1. のuserIdまでFirebaseデータベース参照を作成し、イベントリスナーを追加します。

    database.child("Users").child(userCurrent.getUserId()).addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 
    
        } 
    
        @Override 
        public void onCancelled(DatabaseError databaseError) { 
    
        } 
    }); 
    
  2. ユーザーノードまでFirebaseデータベース参照を作成し、探してみてくださいキーにequalToクエリを使用することにより、正確なユーザー:

    database.child("Users").orderByKey().equalTo(userCurrent.getUserId()).addValueEventListener(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
    
          } 
    
          @Override 
          public void onCancelled(DatabaseError databaseError) { 
    
          } 
         }); 
    

ウィル2番目のオプションはすべてのユーザーをUserノードからフェッチしてからequalToをクエリしますか?

+0

以下を読み、質問の書式設定の問題を修正してください。http://stackoverflow.com/help/formatting – cartant

答えて

2

ユーザーオブジェクトへの正確な参照を作成できるかどうかを問い合わせる必要はありません。この場合、問合せはまったく必要ありません。もちろん、パフォーマンスは悪くなります。

2番目のオプションは、ユーザーノード上のすべてのユーザーをフェッチしません。クエリを実行して、探しているユーザーのみを返します。

ノードのすべての変更をリッスンする必要がない場合は、addListenerForSingleValueEvent()を使用することをお勧めします。これは値を1回だけ読み込みます。

関連する問題