Android Firebase - "onDataChange"和 "onCancelled"没有被调用没有互联网连接

标签 android firebase firebase-realtime-database

在我的应用程序中,我只是尝试通过在以下代码中添加 ListenerForSingleValueEvent 从我的 Firebase 数据库中检索阅读文章:

myRef.child("passages").child(passageNum).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                System.out.println("ON DATA CHANGE");
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("DATABASE ERROR");
                FirebaseErrorHandler.handleDatabaseError(databaseError.getCode(), ReadingActivity.this);
            }

        });

当有互联网连接时,它工作得很好。但是,当我故意关闭互联网连接时,onDataChangeonCancelled 都不会被调用。这非常令人沮丧,因为 databaseError.getCode() 中的两个错误代码与网络连接问题有关。

如果由于没有互联网而无法获取此数据,我想至少让用户知道这一点,而不是让这个监听器随着屏幕不断加载而挂起。有办法解决这个问题吗?我是否必须求助于 Firebase 的 REST API?至少对于 RESTful 网络请求,它们会让您知道连接是否失败。

最佳答案

Firebase 将数据事件流(例如 onDataChange())与可能发生的其他事情分开。它只会在服务器端有理由这样做时调用onCancelled(目前仅当客户端没有访问数据的权限时)。没有理由取消监听器,只是因为没有网络连接。

您似乎在寻找一种方法来检测是否存在网络连接(这不是特定于 Firebase 的任务)或用户是否已连接到 Firebase 数据库后端。后者可以通过将监听器附加到 .info/connected 来完成,这是一个隐式 bool 值,当您连接到 Firebase 数据库后端时为 true 并且是false 否则。请参阅 document on detecting connection state 中的部分了解全部详情。

关于Android Firebase - "onDataChange"和 "onCancelled"没有被调用没有互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39021378/

相关文章:

android - 以编程方式单击上下文操作栏上的“完成”按钮

android - Android ViewModel 的奇怪行为

android - 如何图像按钮在 android 的 ListView 中创建圆圈?

Javascript变量是一个对象数组,但无法访问元素

android - Xamarin.Forms:获取 Firebase Android 数据的 DependencyService

Android + Google Fit 数据上传 : error 5002 - DataType's name does not match package name

android - 在库中包含 Firebase Analytics

javascript - 获取 "remember"选项以匿名使用 Firebase 身份验证

javascript - Firebase 无法根据规则集推送数据

javascript - 使用 jQuery 渲染所有记录