gpt4 book ai didi

android - 为 Firebase 数据库读取查询设置超时

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:40 42 4
gpt4 key购买 nike

当没有互联网连接或任何其他问题时,我正在尝试使用 Firebase 数据库进行读取查询超时。问题是,即使超时生效并且监听器被删除,即使它已被删除,它仍然会被调用。我怎样才能防止这种情况发生?处理超时的最佳方法是什么?

这是我的代码:

final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("key");
final ValueEventListener listener = new ValueEventListener() { /* ... */ };
ref.addListenerForSingleValueEvent(listener);

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
ref.removeEventListener(listener);
}
}, 5000);

Someone here似乎有同样的问题,但我不明白解决方案。

最佳答案

Firebase API 中没有超时之类的东西,因此应该使用我们自己的逻辑来处理超时。这就是我在代码中实现超时的方式。

    private void getDataFromFirebase()
{
final boolean[] gotResult = new boolean[1];
gotResult[0] = false;

FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference dataReference = firebaseDatabase.getReference().child("data");

ValueEventListener dataFetchEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
gotResult[0] = true;
// You async code goes here
}

@Override
public void onCancelled(DatabaseError databaseError) {
gotResult[0] = true;
}
};

if(isNetworkAvailable()) {

dataReference.addListenerForSingleValueEvent(dataFetchEventListener);
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
timer.cancel();
if (gotResult[0] == false) { // Timeout
dataReference.removeEventListener(dataFetchEventListener);
// Your timeout code goes here
}
}
};
// Setting timeout of 10 sec to the request
timer.schedule(timerTask, 10000L);
}
else{
// Internet not available
}
}

关于android - 为 Firebase 数据库读取查询设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946449/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com