Android 从firebase数据库读取值时超时?
使用Android 从firebase数据库读取值时超时?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,使用addListenerForSingleValueEvent从firebase获取数据时,如何添加连接/读取超时? 当我使用addListenerForSingleValueEvent调用获取数据时,我会使ProgressBar可见,并在onDataChange中获取数据时,或者在onCancelled中发生错误时,再次使ProgressBar不可见。但是当没有internet连接时,ProgressBar将永远可见,因为从未调用onDataChange或onCancelled。如何使Pro
addListenerForSingleValueEvent
从firebase获取数据时,如何添加连接/读取超时?
当我使用
addListenerForSingleValueEvent
调用获取数据时,我会使ProgressBar
可见,并在onDataChange
中获取数据时,或者在onCancelled
中发生错误时,再次使ProgressBar
不可见。但是当没有internet连接时,ProgressBar
将永远可见,因为从未调用onDataChange
或onCancelled
。如何使ProgressBar
再次不可见?我认为超时是一个很好的解决方案,但我在firebase API中找不到类似超时的东西,如果除了超时之外还有其他解决方法,请让我知道。谢谢。因为Firebase API中没有像@Doug Stevenson所说的那样的超时,因此应该使用我们自己的逻辑来处理超时。这就是我在代码中实现超时的方式
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 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
}
}
Firebase数据库API没有超时。如果你想在一段时间后停止倾听,你必须使用自己的机制。听起来像是一个答案,道格::-)@多谢。我希望这件事很快就有可能。谢谢。我在答案中提出了自己的超时逻辑。