java - Firebase 离线 setValue 上没有 CompletionListener

标签 java android firebase rx-java

我有这个代码库,我在其中设置了一个值。在离线模式下它写入成功但没有调用 CompletionListener.onComplete 回调函数。

newOrderRef.setValue(order, (firebaseError, firebase) -> {
            if (firebaseError != null) {
                Timber.e(firebaseError.toException(), "Order create failed, id: %s", order.getOrderId());
                subscriber.onError(firebaseError.toException());

            } else {
                Timber.i("Order created, id: %s", order.getOrderId());
                newOrderRef.setPriority(0 - timestamp);
                subscriber.onNext(firebase.getKey());
                subscriber.onCompleted();
            }
        });

回调永远不会被调用。但写得很好。

在另一种情况下,即使在使用 CompositeSubscriptiononDestroy 中取消订阅后,订阅者也会在值写入 firebase 服务器时被调用,即使 fragment 没有运行。

这是正确的行为吗?

      Subscription orderSubscription = OrderManager.createOrder(order)
                        .subscribe(s -> {
                            fabShowSuccess();
                            showSnackbar("onnext Order created " + order.getOrderId());
                        }, throwable -> {
                            showSnackbar("Order failed. Make sure your are connected to internet.");
                            fabShowFailed();
                        }, () -> {
                            fabShowSuccess();
                            showSnackbar("Order created " + order.getOrderId());
                        });
                mCompositeSubscription.add(orderSubscription);

onDestroy() 中,我调用了 mCompositeSubscription.unsubscribe(); ,但稍后会调用订阅者。

最佳答案

当写入已提交到 Firebase 服务器上的数据库时,将调用写入操作的完成监听器。当您处于离线状态时,就不会发生这种情况。

无法取消订阅完成监听器。如果写操作完成时监听器仍然存在,它将被调用。

关于java - Firebase 离线 setValue 上没有 CompletionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184941/

相关文章:

swift - 将选项卡栏项目设置为自定义图像,例如 Instagram

swift - 如何使用 onSnapshot() 方法快速正确地利用 Firestore 实时更新?

java - Richfaces 标签被忽略

java - Java 中的 System.out.format

android - 我们如何在 Android 上的 HttpClient 4.4+ 中启用 SNI?

android - Android 操作系统版本兼容性如何工作?

authentication - 我可以使用任意 ID 而不是电子邮件地址的 Firebase createUser

java - 按下日历中的按钮后不会重新绘制不同的月份

java - 如何开始然后停止运动

android - 当将 fitsSystemWindows 设置为 true 时,CollapsingToolbarLayout 中的 ViewGroup 显示额外的底部填充