У меня проблема при использовании оператора RxJava concat. У меня есть два наблюдаемых, первые Издают результаты из базы данных сервера, а другие выдают результаты из локальной базы данных, а затем я Concat:Realm + Retrofit + RxJava: Concat и SubscribeOn
// Uses a Realm in the UI thread
Observable<MyResult> remoteObservable = mRemoteDataSource.find(tId);
// Uses Retrofit
Observable<MyResult> localObservable = mLocalDataSource.find(tId);
Observable.concat(localObservable, remoteObservable)
.doOnNext(result -> /* Do my stuff */)
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> throwable.printStackTrace())
.subscribe()
Таким образом, это вызывает у меня проблемы, так как я не использую subscribeOn()
в конкатенированный наблюдаемый работает на AndroidScheduler.MainThread()
, и это не запускает пульт, и он запускает NetworkOnMainThreadException
.
Если я реализую subscribeOn(Schedulers.computation())
, я получаю Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created
, поскольку, конечно, Observable не работает в потоке, экземпляр Realm существует.
Я искал в других вопросах, и я не получил ничего полезного, я проверил пример, сделанный по царству: https://github.com/realm/realm-java/blob/master/examples/rxJavaExample/src/main/java/io/realm/examples/rxjava/retrofit/RetrofitExample.java, но, как ни странно, я вижу, что модифицированный наблюдаемый подписывается ни о чем, и он работает.
Почему это работает на образце, и в моем коде я не могу сделать то же самое? Любое предложение?
... это действительно ваш «локальный» наблюдаемый, который использует Retrofit? – EpicPandaForce