如何检测ValueEventListener是否在Firebase中获取数据 [英] How to detect if ValueEventListener has fetched data or not in Firebase
问题描述
我使用以下代码从Firebase DB中获取数据,但由于它在后台线程中发出网络请求,所以我想等到它完成请求并获取值。例如,
boolean isAvailable = false;
$ b $ p
usernameReference.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
isAvailable = true;
}
@Override
public void onCancelled(DatabaseError databaseError){
progressBar.setVisibility(View.GONE);
}
});
if(isAvailable){
//在这里做某事
}
else {
//在这里做某事
}
$ b这段代码总是执行else部分,所以我想等到变量
isAvailable
从数据库中获取值,然后进一步执行。解决方案首先创建一个如下的界面: b
$ bpublic interface IsAvailableCallback {
void onAvailableCallback(boolean isAvailable);
$ b假设你的上面的代码是在这个方法中,接口对象触发回调:
public void isAvailable(IsAvailableCallback callback){
boolean isAvailable = false;
usernameReference.addListenerForSingleValueEvent(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){
isAvailable = true;
//这将触发true
callback.onAvailableCallback(isAvailable);
}
$ b $ @Override
public void onCancelled(DatabaseError databaseError){
progressBar.setVisibility(View.GONE);
//这将触发false
callback.onAvailableCallback(isAvailable);
}
});
$ / code>调用这个方法:
$ b $ (
$ p $isAvailable(new IsAvailableCallback(){
@Override
public void onAvailableCallback(boolean isAvailable){
//你将在这里得到回调,在这里做你的条件
code $ preI'm using following code to fetch the data from Firebase DB but as it makes network request in background thread so I want to wait till it completes the request and get a value. For example,
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 }
This snippet always execute the else part so I want to wait till the variable
isAvailable
get the value from database then further Execution will take place.解决方案First create an interface like this:
public interface IsAvailableCallback { void onAvailableCallback(boolean isAvailable); }
Suppose your above code is in this method which takes interface object to trigger callback like :
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); } }); }
Call this method like :
isAvailable(new IsAvailableCallback() { @Override public void onAvailableCallback(boolean isAvailable) { //you will get callback here, Do your if condition here } }
这篇关于如何检测ValueEventListener是否在Firebase中获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!