簡體   English   中英

不確定如何處理插入方法的返回類型

[英]Not sure how to handle insert method's return type

不確定如何處理插入方法的返回類型。

@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")
                })
        }
    }

活動.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 insertAll(@org.jetbrains.annotations.NotNull()

根據本文檔

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

  • long 單次插入操作
  • long[] 或 Long[] 或 List 用於多個插入操作
  • 如果您不關心插入的 ID,則無效

通常,當您在有空間的情況下使用 rxjava 時,您所做的是觀察數據庫的變化,這樣無論何時從數據庫中插入或刪除數據,您都會獲得更新數據的新 Flowable 或 observable。

所以首先將它包含在您的應用程序 gradle 文件中

應用程序/build.gradle

implementation 'androidx.room:room-rxjava2:2.1.0-alpha06'

這將幫助您直接從房間返回數據流。

現在在您的 Daos 中您可以進行以下更改

道.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
}

現在在您的視圖模型中獲取數據

視圖模型.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() }
             ))

現在在您的 Activity 中,您可以通過觀察數據來更新您的 UI

活動.kt

viewModel.data.observe(this, Observer { 
   //update your recycler view adapter here    
 })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM