android - 如何检测 ValueEventListener 是否已在 Firebase 中获取数据

标签 android firebase firebase-realtime-database

我正在使用以下代码从 Firebase DB 获取数据,但由于它在后台线程中发出网络请求,所以我想等到它完成请求并获取一个值。例如,

boolean isAvailable=false;
    usernameReference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        isAvailable = true;
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        progressBar.setVisibility(View.GONE);
                    }
                });
if(isAvailable){
       //do something here
}
else{
      //do something here 
}

这段代码总是执行 else 部分,所以我想等到变量 isAvailable 从数据库中获取值,然后进一步执行。

最佳答案

首先创建一个这样的界面:

public interface IsAvailableCallback {
    void onAvailableCallback(boolean isAvailable);
}

假设你上面的代码在这个方法中,它接受接口(interface)对象来触发回调,比如:

public void isAvailable(IsAvailableCallback callback) {
    boolean isAvailable=false;
    usernameReference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    isAvailable = true;
                    //this will trigger true
                    callback.onAvailableCallback(isAvailable);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    progressBar.setVisibility(View.GONE);
                    //this will trigger false
                    callback.onAvailableCallback(isAvailable);
                }
            });                
}

像这样调用这个方法:

isAvailable(new IsAvailableCallback() {
    @Override
    public void onAvailableCallback(boolean isAvailable) {
        //you will get callback here, Do your if condition here
    }
}

关于android - 如何检测 ValueEventListener 是否已在 Firebase 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260334/

相关文章:

android - 如何遍历 recyclerview 中的 View 项?

java - android api 参数编号更改。如何支持?

java - 每秒运行一次循环java

swift - Firebase Swift 3 获取数组中的子项列表

android - 如何在Firebase Android中24小时内每次更新一个值

ios - Firebase:每次循环遍历数组时都运行事务

java - 未从 firebase 获取 RecyclerView 的所有结果

Android:如何使用矩阵动画移动 View ?

javascript - 使用 Google Closure Compiler、webpack 和 Firebase JS SDK 编译 js 时出现 JSC_NON_GLOBAL_DEFINE_INIT_ERROR

java - 添加从我的 RecycleView 中选择的项目