首页 > 解决方案 > 在 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

标签: javaandroidfirebase

解决方案


推荐阅读