Моя модель просмотра вызывает методы репозитория для получения некоторых данных из базы данных комнаты, а также из сети.
class Repository @Inject constructor(
private val remoteDatasource: IRemoteSource,
private val localDatasource: ILocalSource,
private val subscriberScheduler: Scheduler,
private val observerScheduler: Scheduler
) : IRepository {
//this method fetches data from room
override fun getData(): Flowable<Boolean> {
return localDatasource.shouldFetchRemote().subscribeOn(subscriberScheduler)
.observeOn(observerScheduler)
}
// makes api call
override fun getRemoteData(): Flowable<Data> {
return remoteDatasource.getData().subscribeOn(subscriberScheduler)
.observeOn(observerScheduler)
}
subscriberScheduler - это Schedulers.io (), а планировщик наблюдателя - AndroidSchedulers.mainThread (). Я получаю исключение, когда делаю запрос из комнаты, говоря, что операция находится в основном потоке. Также, когда я получаю данные из удаленного источника, я проверяю поток, это основной поток, но это не исключение, как сетевой вызов в основном потоке.
Вот мой класс localsource, который использует место:
class Localsource constructor(private val dataDao: DataDao):ILocalSource {
override fun shouldFetchRemote(): Flowable<Boolean> {
if (Looper.getMainLooper().thread == Thread.currentThread()) {
Log.v("thread","main thread")
//this log prints
}
//exception thrown here
return Flowable.just(dataDao.isDataPresent() != 0)
}
Вот класс для RemoteSource
@OpenForTesting
class Remotesource @Inject constructor():IRemoteSource{
override fun getData(): Flowable<Data> {
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
Log.v("thread","main thread")
//this log prints but no exception is thrown like network call on main thread.
}
return service.getData().flatMap { Flowable.just(it.data) }
}
}