我有这个代码库,我在其中设置了一个值。在离线模式下它写入成功但没有调用 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();
}
});
回调永远不会被调用。但写得很好。
在另一种情况下,即使在使用 CompositeSubscription
在 onDestroy
中取消订阅后,订阅者也会在值写入 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/