本文介绍了Firebase离线无setValue上的CompletionListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

$ $ $ $ $ $ $ $ newOrderRef.setValue(order,(firebaseError, (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服务器时,即使片段没有运行,订阅者也会被调用。

这是正确的行为吗?

pre $订阅orderSubscription = OrderManager。 createOrder(order)
.subscribe(s - > {
fabShowSuccess();
showSnackbar(onnext订单创建+ order.getOrderId());
},throwable - >
showSnackbar(订单失败,请确保您已连接到互联网。);
fabShowFailed();
},() - > {
fabShowSuccess ();
showSnackbar(Order created+ order.getOrderId());
});
mCompositeSubscription.add(orderSubscription);

onDestroy() c $ c> mCompositeSubscription.unsubscribe(); ,但用户稍后调用。

解决方案写入操作的完成侦听器将在写入提交到Firebase服务器上的数据库时调用。当你离线时,不会发生这种情况。



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


I have this codebase where I set a value. In offline mode it writes successfully but is not calling the CompletionListener.onComplete callback function.

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

The callback never gets called. But writes fine.

In another case even after unsubscribing in onDestroy using CompositeSubscription, the subscriber gets called when the value gets to write to firebase server even when the fragment is not running.

Is this the correct behavior ?

      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);

In onDestroy() I call mCompositeSubscription.unsubscribe(); , but the subscriber gets called later.

解决方案

The completion listener for write operations will be invoked when the write has been committed to the database on the Firebase servers. When you're offline, that won't happen.

There is no way to unsubscribe a completion listener. If the listener still exists when the write operation completes, it will be invoked.

这篇关于Firebase离线无setValue上的CompletionListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 06:06