来自密钥的Android Firebase列表数据

时间:2016-11-25 10:27:41

标签: android firebase firebase-realtime-database

我有一个节点,用于存储每个用户的项目密钥列表。

user_projectes的结构是:

enter image description here

我已经开始使用Firebase for Android了,我最终得到了这个:

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

如何检索我获得的每个项目密钥的项目数据并将其添加到我的listview中?

3 个答案:

答案 0 :(得分:2)

再次查询数据库

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());
        }
    });

答案 1 :(得分:2)

不幸的是,正如@rhari所提到的那样,你必须进行另一个查询....当我使用firebase进行“连接”时,我发现有用的是使用RxJava ...可能有类似下面的内容(您可以在适配器中使用它来填充ListView / RecyclerView)

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

在这种情况下,您希望列表在添加项目时动态更新....在这种情况下,您需要具有onChildAdded / onChildRemoved等的listner版本,并且然后需要从那些项目中查找项目。

答案 2 :(得分:0)

您必须为项目实体创建模型,然后才能使用Project mProject = projectSnapshot.getValue(Project.class);