Java 从Firebase检索多个子节点的数据
我正在开发一个应用程序,我只想显示手机中储存了联系人号码的用户的数据。因此,我检索了一个联系人号码列表Java 从Firebase检索多个子节点的数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在开发一个应用程序,我只想显示手机中储存了联系人号码的用户的数据。因此,我检索了一个联系人号码列表contactList。现在,我想从Firebase获取所有联系人列表用户帖子。我有没有办法只向Firebase询问我的联系人列表中的那些节点。一种方法是检索所有用户,然后从中获取相关用户(就像我下面所做的那样)。有没有更好的办法 Users: { 7828272892 : { name: xyz,
contactList
。现在,我想从Firebase获取所有联系人列表
用户帖子。我有没有办法只向Firebase询问我的联系人列表中的那些节点
。一种方法是检索所有用户,然后从中获取相关用户(就像我下面所做的那样)。有没有更好的办法
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(“用户”).addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共无效onDataChange(数据快照快照){
List allItems=new ArrayList();
对于(DataSnapshot postSnapshot:snapshot.getChildren()){
if(contactList.contains(postsnashot.child(“phoneNo”).getValue()){
//取回帖子
}
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
我有没有办法只向firebase询问我的联系人列表中的那些节点
是的,你已经这样做了
有没有更好的办法
这样做的方式是Firebase中常用的做法。您可以查询数据库并检查列表中是否已经存在数据,您的情况是在
联系人列表中。如果列表包含phoneNo
,则可以检索帖子。尝试使用此代码读取多个节点数据
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) {
}
});
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) {
}
});