仅在前一个对象完成后才如何从Firebase获取对象?

时间:2018-11-13 19:35:54

标签: java android firebase firebase-realtime-database

我有一个完整的用户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中,我遵循了弗兰克·范·普菲伦的回答,但我无法完成此任务。谢谢!!!

1 个答案:

答案 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();