【问题标题】:How to detect if ValueEventListener has fetched data or not in Firebase如何在 Firebase 中检测 ValueEventListener 是否已获取数据
【发布时间】:2016-10-26 10:51:21
【问题描述】:

我正在使用以下代码从 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 
}

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

【问题讨论】:

  • 为此使用接口。
  • 你能举个例子吗?

标签: android firebase firebase-realtime-database


【解决方案1】:

首先创建一个这样的接口:

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

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

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
    }
}

【讨论】:

  • 谢谢...解释清楚...!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2016-11-18
相关资源
最近更新 更多