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