java - 在 onDataChange 方法中设置数据,并在外部使用
问题描述
我正在尝试使用具有接口的另一个集合中的 uid 从 Firebase 获取名称数据,将该数据设置为变量,然后执行一些任务。然后假设我想在任务完成与否时显示 Toast。
这是方法
public void createExcel(final String grade) {
Boolean taskSuccess;
DatabaseReference attendanceRef = FirebaseDatabase.getInstance().getReference().child("attendance").child(grade);
attendanceRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String thisUid;
for (DataSnapshot ds : snapshot.getChildren()) {
for (DataSnapshot ds2 : ds.getChildren()) {
thisUid = ds2.child("uid").getValue().toString();
readData(thisUid, new MyCallBack() {
@Override
public void onCallback(String value) {
thisName[0] = value;
//Do some task
if (//task success) {
taskSuccess == true;
}
}
});
}
}
System.out.println(taskSuccess); //taskSuccess value is always false
}
});
}
这是我的界面
public interface MyCallBack {
void onCallback (String value);
}
这是我的 readData 方法
public void readData (String uid, final MyCallBack myCallBack) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String value = snapshot.child("name").getValue().toString();
myCallBack.onCallback(value);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
有什么方法可以在 onDataChange 方法中设置 taskSuccess 值并在 onDataChange 方法之外使用它?因为如果我在里面做一个 Toast,readData
它会因为循环从数据库中获取数据而做一些Toast
解决方案
推荐阅读
- javascript - 仅当我将鼠标悬停在 TD 上时才显示 JS 添加的链接
- oracle - 在 BI 发布者的数据模型中检索超过 200 行
- c++ - 前进时改变 FOV(视野)
- image - 在 JavaFX 中加载外部图像
- onlongclicklistener - Countinouly 减少 recylerview 适配器类中长按时的值
- r - 当“%in%”和“which”不起作用时,基于字符向量子集数据帧行
- arrays - 是什么导致从阵列的 RAM 中查找 log(N) 时间?
- visual-studio-code - 如何在 vscode 中启动时运行多个任务?
- reactjs - 样式化组件 - 覆盖默认标题
- angular - Angular 实现变更检测的最佳方式