不确定如何处理插入方法的返回类型

时间:2019-08-05 04:23:05

标签: android rx-java android-room

不确定如何处理插入方法的返回类型。

@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()

2 个答案:

答案 0 :(得分:2)

按照this documentation

使用@Insert注释注释的方法可以返回:

  
      
  • long用于单次插入操作long []或Long []或
  •   
  • 列出多个插入操作
  •   
  • 如果您不在乎插入的ID,请避免
  •   

答案 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    
 })