gpt4 book ai didi

java - 为什么我的 ArrayList 是空的,即使 firebase datasnapshot 包含子项

转载 作者:行者123 更新时间:2023-12-01 18:34:26 25 4
gpt4 key购买 nike

我正在尝试从 Firebase 实时数据库中提取用户数据,数据快照确实包含子项和数据,但当我尝试将其放入数组时,数组为空。我创建了一个用户类,其中包含与 firebase 中的属性相匹配的属性、重载构造函数和一些方法。它不会扩展任何类,但据我所知,这不适用于从 Firebase 检索数据。

private List<user> usersList = new ArrayList<>();
private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
private DatabaseReference ref = databaseReference.child("Users");

public List<user> getUsers(){
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
Log.i("users", String.valueOf(dataSnapshot.getChildrenCount()));

for(DataSnapshot child: dataSnapshot.getChildren()){
user userRetrieved = child.getValue(user.class);
Log.d("USER before array", userRetrieved.getUserName());
usersList.add(userRetrieved);
for(int i = 0;i < usersList.size(); i++){
Log.d("USER", usersList.get(i).getUserName());
}

}
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.i("ERROR", databaseError.getMessage());
}
});

return usersList;
}

欢迎所有反馈。

最佳答案

Firebase API 是异步的。 addListenerForSingleValueEvent 立即返回,并且您传递给它的回调将在查询完成后一段时间执行。无法保证这种情况会多快发生。同时,您的函数返回一个最初为空的列表。您可能有这样的代码:假设查询已经完成,但实际上尚未完成。

底线是,您应该只在调用回调之后处理查询结果,而不是之前。

关于java - 为什么我的 ArrayList 是空的,即使 firebase datasnapshot 包含子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60086689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com