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没有超时。如果你想在一段时间后停止倾听,你必须使用自己的机制。听起来像是一个答案,道格::-)@多谢。我希望这件事很快就有可能。谢谢。我在答案中提出了自己的超时逻辑。