Это моя ошибка, после этого я запускаю пример проекта, который я разработал с Room
и RX java
:
e: /home/milad/workspace/android/WalletMVVM/app/build/tmp/kapt3/stubs/debug/com/example/walletmvvm/data/dao/CurrencyDao.java:15: error: Not sure how to handle insert method's return type.
public abstract io.reactivex.Single<com.example.walletmvvm.data.model.CurrencyModel> insert(@org.jetbrains.annotations.NotNull()
Я много искал, но не сделалнайти что-нибудь.
Я мог бы реализовать Retrofit
с RX java
и использовать его, и я мог бы выполнить Room
Запрос в другом потоке с RX java
, но я не смог установить observer
и subscribe
a observable
с RX java
пока.
Все звучит хорошо
Это мой Dao
:
@Dao
interface CurrencyDao {
@Query("SELECT * FROM ${DbConstants.TABLE_CURRENCY} ORDER BY ${DbConstants.NAME_CURRENCY_MODEL} ASC")
fun getCurrencyList(): Observable<List<CurrencyModel>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(currencyModel: CurrencyModel): Single<CurrencyModel>
}
Это мой repository
:
companion object {
// For Singleton instantiation
@Volatile
private var instance: CurrencyRepository? = null
fun getInstance(currencyDao: CurrencyDao) =
instance ?: synchronized(this) {
instance ?: CurrencyRepository(currencyDao).also { instance = it }
}
}
fun getCurrencyList(): Observable<List<CurrencyModel>>? {
return currencyDao.getCurrencyList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
Это мои fragment
, которые мне observer
данные:
@SuppressLint("CheckResult")
private fun initObservers() {
val getCurrencyListObserver = currencyViewModel.getCurrencyLists()
getCurrencyListObserver?.subscribeWith(getCurrenciesFromDatabase())
}
private fun getCurrenciesFromDatabase() : Observer<List<CurrencyModel>> {
return object : Observer<List<CurrencyModel>> {
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<CurrencyModel>) {
t.let {
showResult(it.size.toString() + " items")
setRecyclerData(it)
binding.listSize = it.size
}
}
override fun onError(e: Throwable) {
}
}
}
Для реализации этого я изучаю это в среде и учусь this
Я вижу пример кода о Kotlin в googlesamples / android-архитектура-компоненты , но они не используют наблюдатель
Обновление:
, потому что после этого я удаляю single
Я не могу использовать:
currencyDao.insert(currency)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
И currencyDao.insert(currency)
Не могу получить доступ к .subscribeOn()
и другим
Обновление:
Я решил, когдая изменил тип возвращаемого значения на Long
, но столкнулся с новым error
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(currencyModel: CurrencyModel): Single<Long>
И новая ошибка:
e: /home/milad/workspace/android/WalletMVVM/app/build/tmp/kapt3/stubs/debug/com/example/walletmvvm/data/dao/CurrencyDao.java:11: error: Not sure how to convert a Cursor to this method's return type (java.lang.Object).
public abstract io.reactivex.Observable<java.lang.Object> getCurrencyList();
Обновление:
Я изменил тип возврата insert
на Completable
, и он исправил