java仅打印完成的成员列表
所以代码现在看起来像这样
问题是我得到了不止一个日志打印。但我只需要完整完整的墨伯里斯特
for (String memberByNumber : memberListByNumber) {
mFirebaseDatabaseReference.child("userUidsByNumber/").child(memberByNumber).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
String userUid = dataSnapshot.getValue().toString();
memberList.add(userUid);
Log.d("LOL", "ContactsAdapter: " + memberList);
} else {
Snackbar.make(view, R.string.user_does_not_exist, Snackbar.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Snackbar.make(view, R.string.error, Snackbar.LENGTH_LONG).show();
}
});
}
我希望你能理解我的问题并能帮助我。 提前谢谢
# 1 楼答案
我想发表评论,但由于我在这里的声誉,我不能发表评论 所以,我的答案是,将每个条目记录到一个文件中,这样只会使打印必要的条目变得更加困难,所以在不同的路径上,在现有的一个文件中再给出一个if-else语句,并使用try-exception将完成的和取消的条目划分到一些缓存中,然后使完成的文件无效
# 2 楼答案
在firebase中,没有一件事是完整的
只要任何子节点下的任何数据发生更改,值事件就会不断发生。此外,值事件发生在所有子事件完成后,即确保该点的所有子节点都存在。下一个事件将为您提供该特定点的完整列表
在每次数据更改调用中,您可以清除列表,添加所有新值并打印。这就是firebase的工作原理
如果只需要整个列表一次,并且不需要任何新的更改,可以使用addListenerForSingleValueEvent方法添加值事件侦听器。现在,列表将被读取一次,不再读取。但是,如果启用了持久性,数据将从手机缓存中读取一次,而不是从数据库中读取
也许你要找的是一个ChildEventListener,它能让你更精确地控制。这将有子添加、删除和更改事件,这些事件将一次为您提供一个子列表数据
我不知道你的真正目的是什么,所以这是我能解释的最好的解释。希望这有帮助