我正在开发一个应用程序,在该应用程序中,我只想显示其联系电话已保存在手机中的用户的数据。因此,我检索了一个联系电话列表contactList
。现在,我想从Firebase获取所有contactList
用户的帖子。有什么方法可以让Firebase仅询问contactList
中的那些节点。一种方法是检索所有用户,然后从中获取相关用户(就像我在下面所做的那样)。有什么更好的方法吗?
Users: {
7828272892 : {
name: xyz,
gender: male,
phoneNo: 7828272892
Posts: {
SomeKey1: {
content: "This is post 1", Var2: "kkk"} }},
7924272894 : {name: abc, gender: male, phoneNo: 7924272894}
}
代码:
databaseReference.child("Users").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<Post> allItems = new ArrayList<Post>();
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
if (contactList.contains(postSnapshot.child("phoneNo").getValue())) {
// retrieve posts
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 0 :(得分:1)
有什么办法可以只向我的
contactList
中的那些节点询问Firebase吗?
是的,您已经执行此操作的方式。
还有更好的方法吗?
执行此操作的方法是Firebase中的常用做法。您查询数据库,并检查列表中是否已存在数据(在您的情况下,在contactList
中)。如果列表包含该phoneNo
,则可以检索这些帖子。
答案 1 :(得分:0)
尝试使用此代码读取多个节点数据。
mFirebaseInstance = FirebaseDatabase.getInstance();
mDatabase = mFirebaseInstance.getReference("usersDb/UserTable");
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mUserList.clear();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
User user = dataSnapshot1.getValue(User.class);
mUserList.add(user); // add all data into list.
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});