Firebase离线没有在setValue

时间:2016-05-12 10:59:24

标签: 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();
            }
        });

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

在另一种情况下,即使在使用onDestroy取消订阅CompositeSubscription之后,即使片段未运行,当值写入firebase服务器时也会调用订阅者。

这是正确的行为吗?

      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();,但稍后会调用该订阅者。

1 个答案:

答案 0 :(得分:4)

当写入已提交到Firebase服务器上的数据库时,将调用写入操作的完成侦听器。当您离线时,这不会发生。

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