我有一个节点,用于存储每个用户的项目密钥列表。
我user_projectes
的结构是:
我已经开始使用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中填充项目name
和photoURL
。
如何检索我获得的每个项目密钥的项目数据并将其添加到我的listview中?
答案 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);