java.lang.NullPointerException: Attempt to invoke interface method 'void io.objectbox.reactive.DataSubscription.cancel()' on a null object reference
at io.objectbox.query.QueryPublisher.unsubscribe(QueryPublisher.java:89)
at io.objectbox.reactive.DataSubscriptionImpl.cancel(DataSubscriptionImpl.java:21)
at io.objectbox.rx.RxQuery$5$2.cancel(RxQuery.java:127)
at io.reactivex.internal.disposables.CancellableDisposable.dispose(CancellableDisposable.java:49)
at io.reactivex.internal.disposables.DisposableHelper.set(DisposableHelper.java:54)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.setDisposable(SingleCreate.java:109)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.setCancellable(SingleCreate.java:114)
at io.objectbox.rx.RxQuery$5.subscribe(RxQuery.java:124)
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
@Override
public synchronized void unsubscribe(DataObserver<List<T>> observer, @Nullable Object param) {
DataPublisherUtils.removeObserverFromCopyOnWriteSet(observers, observer);
if (observers.isEmpty()) {
objectClassSubscription.cancel(); // this line
objectClassSubscription = null;
}
}
subscribe method in QueryPublisher never call when i use Single , so objectClassSubscription be null
override fun get(): Single<List<Airport>> = RxQuery.single(box.query()
.equal(Airport_.deleted, 0)
.build())
when using Observable instead of Single, all be right
if(single) {
if(onlyChanges) {
throw new IllegalStateException("Illegal combination of single() and onlyChanges()");
}
publisher.publishSingle(observer, publisherParam);
} else {
publisher.subscribe(observer, publisherParam);
if(!onlyChanges) {
publisher.publishSingle(observer, publisherParam);
}
}
when using Observable instead of Single, all be right