我有一个完整的用户ID列表,如下所示:
List<String> userIds = new ArrayList<>();
现在,我想遍历此列表,并从Firebase数据库获取所有相应的用户对象。这是我的代码:
for (String uid : userIds) {
usersRef.child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
//Create another listener?
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}
我知道我可以使用嵌套的侦听器,但是我不能使用这种方式,因为我的列表中包含超过1000个uid。
如何仅在上一个用户对象完成后才能获得下一个用户对象?在post中,我遵循了弗兰克·范·普菲伦的回答,但我无法完成此任务。谢谢!!!
答案 0 :(得分:1)
要顺序加载它们,只需从列表中删除获得的ID。
类似这样的东西:
public void getNextUser() {
if (list.size() > 0) {
String uid = list.get(0)
list.remove(0);
usersRef.child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
getNextUser()
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }
});
}
}
然后用:
getNextUser();