Я использую Room в проекте, и у меня есть следующий интерфейс DAO:
@Dao
interface BalanceDao {
@Query("SELECT * FROM balance")
fun getAllBalances(): Flowable<List<BalanceDataModel>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertBalanceList(balanceDataModelList: List<BalanceDataModel>): List<Long>
}
Вставка работает фантастически, но метод getAllBalances()
не работает, так как он не получает ни одной строки. Я извлек базу данных после вставки, и я могу видеть все строки там; SELECT * from balance
отлично работает при локальном выполнении на извлеченной БД с помощью приложения для настольного компьютера.
Я также пытался изменить тип возвращаемого значения getAllBalances()
с Flowable<List<BalanceDataModel>>
на Single<List<BalanceDataModel>>
, но происходит то же самое: никаких результатов.
У меня есть PortfolioManager, из которого я вызываю следующий метод и передаю наблюдателя и владельца из моего фрагмента.
fun getAllCoins(owner: LifecycleOwner, observer: Observer<List<Balance>>) {
portfolioViewModel
.balanceListLiveData
.observe(owner, observer)
return portfolioViewModel.getPortfolioCoins()
}
Затем в PortfolioManager у меня есть доступ к ViewModel, из которого я вызываю следующий метод:
fun getPortfolioCoins() {
coinRepository
.getBalanceListPortfolio()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onSuccess = {
balanceListLiveData.postValue(it)
})
}
А в классе репозитория у меня есть это:
fun getBalanceListPortfolio(): Single<List<Balance>> {
val converter = BalanceDataModelConverter()
val balanceList = mutableListOf<Balance>()
coinDatabase.balanceDao()
.getAllBalances()
.toObservable()
.flatMapIterable { t: List<BalanceDataModel> -> t }
.map { t: BalanceDataModel ->
{
val a: Balance = converter.fromFirstToSecond(t)
balanceList.add(a)
}
}
return Single.just(balanceList.toList())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
Кто-нибудь знает, что может быть не так? Заранее большое спасибо!