不确定如何处理插入方法的返回类型。
@Dao
interface ProductDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAlll( product:List<Product>):List<Product>
}
override fun getFactoriProduct(): Observable<List<Product>> {
return Observable.create { emitter ->
api.getProductRemote()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it != null) {
emitter.onNext(db.productDao().insertAlll(it))
Timber.e("request->$it")
}
}, {
emitter.onNext(db.productDao().getProduct())
it.printStackTrace()
Timber.e("ErrorRequest->$it")
})
}
}
activity.kt
fun init() {
mainViewmodel.getProduct().subscribe {
val adapter = ProductAdapter(it)
RecyclerView2.layoutManager = LinearLayoutManager(this, LinearLayout.HORIZONTAL, false)
RecyclerView2.adapter = adapter
adapter.update(it)
}.addTo(this.CompositeDisposable)
如何处理插入方法的返回类型。 公共抽象java.util.List insertAlll(@ org.jetbrains.annotations.NotNull()
答案 0 :(得分:2)
答案 1 :(得分:0)
通常,将rxjava放在有空间的情况下,您要做的就是观察数据库的变化,以便每当从数据库中插入或删除数据时,都会获得新的Flowable或可观察到的更新数据。
因此首先将其包含在您的应用gradle文件中
app / build.gradle
implementation 'androidx.room:room-rxjava2:2.1.0-alpha06'
这将帮助您直接从房间返回数据流。
现在在您的Daos中,您可以进行以下更改
Dao.kt
@Dao
interface Dao{
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAlll(product:List<Product>):Single<List<Int>>
@Query("Select * from YOUR_TABLE_NAME")
fun getAll():Flowable<List<Product>> // return a flowable here because this will be triggered whenever your data changes
}
现在在您的视图模型中获取数据
ViewModel.kt
val data = MutableLiveData<List<Product>>;
db.dao().getAll() // will fetch a new data after every insertion or change
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ data.postValue(it) },
{ e -> e.printstacktrace() }
))
// This is just to insert the list of produts
db.dao().insertAll(listProduct)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{// Do nothing },
{ e -> e.printstacktrace() }
))
现在,在“活动”中,您可以通过观察数据来更新UI
Activity.kt
viewModel.data.observe(this, Observer {
//update your recycler view adapter here
})