私は値を設定するこのコードベースを持っています。オフラインモードでは正常に書き込みを行いますが、CompletionListener.onCompleteコールバック関数は呼び出されません。Firebaseオフラインno setValueのCompletionListener
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 serverに書き込まれると、サブスクライバが呼び出されます。
これは正しい動作ですか? onDestroy()
で
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);
私はmCompositeSubscription.unsubscribe();
を呼び出しますが、加入者は、後に呼び出されます。
ありがとうございました。私はネットワークが利用可能であるかどうかをチェックしてエラーを返すことで問題を回避しました。 – Arka
データがローカルデータベースに正常に書き込まれたときに通知する他の方法はありますか?結局のところ、それはしばらく時間がかかるIO操作です。私は書いているのと同じ場所に値リスナを設定し、onChangedコールバック(これは適切に呼ばれます)を待ちます。しかし、このアプローチは、おそらく私は新しい値が私が書き込もうとしている値と同じであるかどうかをチェックしなければならないので、あまり安全ではないように見えます。フィードバックありがとう! –
@KubaSpatny私は同じ疑問も持っています。値がローカルFirebaseデータベースに書き込まれているかどうかを確認する方法はありますか? –