【问题标题】:Firebase mobile connection testing issues for android适用于 Android 的 Firebase 移动连接测试问题
【发布时间】:2017-12-01 19:17:01
【问题描述】:

我正在使用 Firebase 实时数据库构建应用,并且正在测试 onFailure 回调。我关闭了我的移动数据并运行以下代码。

mDatabaseReference.updateChildren(childUpdates)
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(TeamActivity.this, R.string.toast_message_error_add, Toast.LENGTH_LONG).show();
                }
            });

问题是 toast 消息没有弹出,然后当我重新打开移动数据时,突然之间,我的 firebase 数据库在几秒钟后被填充。现在我明白当你设置 FirebaseDatabase.getInstance().setPersistenceEnabled(true) 时应该会发生这种情况,但我没有这个设置,也不希望它设置。应用程序应在互联网连接关闭时显示 toast 消息,因为它应该无法写入。有人知道为什么会这样吗?

【问题讨论】:

    标签: android firebase-realtime-database


    【解决方案1】:

    onFailure 回调仅在服务器上的写入失败时触发,通常是因为它被您的安全规则拒绝。

    没有网络连接不会触发故障,它只会延迟对数据库服务器的写入,直到您再次联机。

    另见:

    【讨论】:

    • 我的一个 beta 测试客户端在他的移动设备(始终连接网络)和 wi-fi 平板电脑(不始终连接)上安装了该应用程序。我们遇到的问题是,当他的平板电脑离线时,他写了很多数据。他无法连接到互联网,所以他用手机重复写入,但是一旦他的平板电脑收到连接,数据就会再次写入重复数据。所以我想最好的方法是在写入服务器之前检查连接,对吗?
    • 没有最好的方法。以您当前实现它的方式,最后一次写入获胜。这可能是你想要的,也可能不是。如果不是这样,您确实不能在离线时写作(或使用事务,在您离线时不会工作),但这对于您的用户来说通常是一种不便,因为他们的连接不稳定。另一种方法是为每个更新添加一个时间戳,然后如果它们的时间戳比当前值旧,则拒绝写入安全规则。
    • 谢谢弗兰克。我认为最好保持原样,让连接不稳定的人发生延迟。我只是不允许没有连接的设备能够点击添加按钮或其他东西。顺便说一句,我喜欢你的火影!
    【解决方案2】:

    您可以使用线程来检查连接是否可用,因为 firebase 不提供检查方法:How to check currently internet connection is available or not in android

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2011-04-30
      • 2013-03-24
      • 1970-01-01
      • 2016-08-23
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多