2016-11-25 6 views
1

私は各ユーザのプロジェクトキーのリストを格納するノードを持っています。Android Firebaseはキーのデータを一覧表示します

user_projectesの構造は次のとおりです。

enter image description here

私は、Android用Firebaseでプレイし始めていると私はこれで終わった:

mFirebaseDatabaseReference.child("user_projects").child(mFirebaseUser.getUid()) 
     .addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot snapshot) { 
       for (DataSnapshot projectSnapshot: snapshot.getChildren()) { 
        Log.e("Project","Project Key found: " + projectSnapshot.getKey()); 
       } 
      } 
      @Override 
      public void onCancelled(DatabaseError firebaseError) { 
       Log.e("Chat", "The read failed: " + firebaseError.getDetails()); 
      } 
     }); 

は、現在、私が得たもののための鍵でありますプロジェクト。

私はプロジェクトデータを格納する別のノードprojectsを持っています。 プロジェクトデータは、projects/$projectKeyノードに格納されています。

ListView/GridView内にプロジェクトnamephotoURLも入力する必要があります。

私が取得したプロジェクトキーごとにプロジェクトデータを取得してリストビューに追加する方法はありますか?

+0

'DataSnapshot.getValue()'メソッドを使用してください。 DataSnapshotの参照 - > https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot –

+0

私はこのノード内の別のノードからデータを必要とします。私はキーだけをストロークします – TheUnreal

答えて

2

をデータベースに問い合わせるProject mProject = projectSnapshot.getValue(Project.class);

+0

良い方法です!私はRXをjavascriptで使っていますので、RXJavaで作業したいと思っています – TheUnreal

+0

'getBusinessKeys'はどのように見えますか? – TheUnreal

+0

'flatMap'の代わりに' MergeWith'または 'Zip'を使うと、両方のクエリ結果を受け取ってそれらをマップしたり、それらを使ってやりたいことを何でもしたりすることができます。このようにして、両方の問合せ方法が完全に互いに依存しないようにします。 –

0

あなたは、あなたがちょうど@rhariが言及として、あなたは別のクエリを作成しなければならないのは、再度

残念ながら
mFirebaseDatabaseReference.child("user_projects").child(mFirebaseUser.getUid()) 
    .addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      for (DataSnapshot projectSnapshot: snapshot.getChildren()) { 
       String key = projectSnapshot.getKey();       
       mFirebaseDatabaseReference.child("projects").child(key) 
       .addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot snapshot1) { 
         Project p = snapshot1.getValue(); 
        } 
       } 
     } 
     @Override 
     public void onCancelled(DatabaseError firebaseError) { 
      Log.e("Chat", "The read failed: " + firebaseError.getDetails()); 
     } 
    }); 
+0

しかし.. – TheUnreal

+0

'projectSnapshot.getKey()'はエンティティのキ​​ーのみを返し、 'projectSnapshot.getValue()'はそのエンティティの値を返します –

+0

私は 'user_projects'ノードからの値が単なる数値である必要はありません。' projects'ノード(名前、イメージなど)からのプロジェクトデータをすべて必要とします... – TheUnreal

2

を使用することができ、プロジェクトのエンティティのためのモデルを作成する必要があります。 ...私がfirebaseとのような "結合"をするときに便利なのは、RxJavaを使うことです...例えばListView/RecyclerViewにあなたのアダプタで使うことができます。

public Observable<Project> getProjects(String userId) { 
    return getProjectKeys(userId).flatMap(projectKey -> getProject(projectKey)); 
} 

ここでは、プロジェクトが追加されたときにリストを動的に更新したい場所があります。その場合は、onChildAdded/onChildRemovedなどのバージョンのリスナーが必要です。プロジェクトのルックアップを行う必要がありますそれら。

関連する問題