gpt4 book ai didi

java - 如何获得一个 valueEventListener() 的结果并在另一个中使用它?

转载 作者:行者123 更新时间:2023-11-29 23:16:18 24 4
gpt4 key购买 nike

我有一个 valueEventListener() 用于从 Firebase 获取数据。

这是第一个。

sectionReference.child(classID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
uidArrayList.add(snapshot.getKey());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}

我想获取 uidArrayList 中的 UID 列表,并使用它来执行一些其他功能。

这是第二个。

mRef.addValueEventListener(new ValueEventListener() {

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

getUIDsInCurrentClass();

for(DataSnapshot snapshot: dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
if(user.getRole().equals("student") && uidArrayList.contains(user.getUid())){
studentArrayList.add(user);
}

}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}

在第二个 Listener 中,您可以看到我想访问 uidArrayList 的内容。我用Log.d看到ArrayList的size是0,也就是说在第二个listener调用的时候没有初始化。

有什么方法可以确保 uidArrayList 在下一个 ValueEventListener() 被访问之前用所有值初始化。

我试过这样做,Event Handlers & Event Listeners Independent of one Another

但它对我不起作用。预先感谢您的回答。

最佳答案

Is there any way that I can make sure that the uidArrayList is initialized with all the values before it is accessed in the next ValueEventListener()?

是的。我能想到的最简单的解决方案是使用嵌套查询。所以第二个查询必须嵌套在第一个查询中,这样你就可以确定你的 uidArrayList 不为空。所以代码应该看起来像这样:

sectionReference.child(classID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
uidArrayList.add(snapshot.getKey());
}

mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//getUIDsInCurrentClass();
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
if(user.getRole().equals("student") && uidArrayList.contains(user.getUid())){
studentArrayList.add(user);
}
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError dbError) {
Log.d("TAG", dbError.getMessage()); //Don't ignore potential errors!
}
});

关于java - 如何获得一个 valueEventListener() 的结果并在另一个中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55305822/

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