【问题标题】:Timeout when reading a value from firebase database?从firebase数据库读取值时超时?
【发布时间】:2017-09-26 21:48:20
【问题描述】:

使用addListenerForSingleValueEvent 从firebase 获取数据时如何添加连接/读取超时? 当我使用addListenerForSingleValueEvent 调用获取数据时,我使ProgressBar 可见,并在onDataChange 中获取数据或onCancelled 中发生某些错误时再次使ProgressBar 不可见。但是当没有互联网连接时,ProgressBar 永远可见,因为onDataChangeonCancelled 永远不会被调用。如何使ProgressBar 再次不可见?我认为 timeout 是一个很好的解决方案,但我在 firebase API 中找不到类似 timeout 的东西,如果除了 timeout 还有其他方法可以解决这个问题,请告诉我。谢谢。

【问题讨论】:

  • Firebase 数据库 API 没有超时。如果您想在一段时间后停止收听,则必须使用自己的机制。
  • 听起来像是道格的回答。 :-)
  • @DougStevenson 谢谢。我希望这很快就会出现。
  • 谢谢。我在答案中提出了自己的超时逻辑。

标签: android firebase firebase-realtime-database


【解决方案1】:

由于正如@Doug Stevenson 所说,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 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
    }
}

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多