当前位置: 首页 > 知识库问答 >
问题:

使用Rxjava在Room数据库中更新和显示数据

相化
2023-03-14

我在房间数据库中使用MVVM架构模式,当使用Livedata和update row时,它会立即显示recylerview中的更改。

   @Query("select * from lessons_table where course_id = :courseId")
   fun getListLessonDb(courseId:Int):LiveData<List<LessonEntity>>

但是我想在mvvm中使用Rxjava而不是livedata来显示数据和更改,但是当更新一行时,它不会立即在recyclerview中显示更改。这是我的代码:

 @Dao
interface LessonDao {

@Query("select * from lessons_table where course_id = :courseId")
fun getListLessonDbRx(courseId: Int): Single<List<LessonEntity>>

@Update
fun updateLessonRX(lessonEntity: LessonEntity): Completable

 }

LessonRepository

class LessonRepository(val application: Application) {

val lessonDao: LessonDao

init {
    val db = ArabiAraghiTutorialDatabase.getDataBase(application)
    lessonDao = db!!.lessonDao()
}
 
     fun getListFromDb(courseId: Int): LiveData<List<LessonEntity>> {
    val result: MutableLiveData<List<LessonEntity>> = MutableLiveData()
    getObservable(courseId).observeOn(Schedulers.io())
        .subscribeOn(AndroidSchedulers.mainThread())
        .subscribe(object : SingleObserver<List<LessonEntity>> {

            override fun onSuccess(t: List<LessonEntity>) {
                result.postValue(t)


            }


            override fun onSubscribe(d: Disposable) {

            }


            override fun onError(e: Throwable) {


            }


        })
    return result
}

 fun getObservable(courseId: Int): Single<List<LessonEntity>> = lessonDao.getListLessonDbRx(courseId)

 fun updateLessenDbRx(lessonEntity: LessonEntity) {


    lessonDao.updateLessonRX(lessonEntity).observeOn(AndroidSchedulers.mainThread())
        .observeOn(Schedulers.io()).subscribe(object : CompletableObserver {
            override fun onComplete() {
          

            }

            override fun onSubscribe(d: Disposable) {

            }

            override fun onError(e: Throwable) {

            }
        })
}
  

 

  
}

视图模型

    class LessonViewModel(application: Application):AndroidViewModel(application) {

private val lessonRepository=LessonRepository(application)

   fun getListLessonFromDb(courseId: Int):LiveData<List<LessonEntity>> = lessonRepository.getListFromDb(courseId)


fun updateLessonRx(lessonEntity: LessonEntity) = lessonRepository.updateLessenDbRx(lessonEntity)

     }

获取片段中列表的方法

   private fun getListLessonDb(courseId: Int, context: Context) {
    lessonViewModel.getListLessonFromDb(courseId).observe(viewLifecycleOwner, Observer {

        setupRecyclerView(it, context)

    })
}

更新行的方法

      lessonViewModel.updateLessonRx(bookmarkLesson)

我应该做什么,我应该修复哪个部分?

共有1个答案

邵博艺
2023-03-14

尝试从Single更改返回类型

 类似资料:
  • 我想用Rxjava使用ROOM,以下是我的代码: 我的数据库结构类: 这是我的ProductDAO课程: 这是我用于创建和管理数据库的数据库类: 这是我处理数据库的活动: 下面是发生的情况,当我第一次启动我的activity类时,没有发生错误,当我从emulator下载创建的数据库并在sqlite数据库管理器中打开它时,问题是文件是空的,没有创建数据库 当我回去重新打开数据库时,我得到了很多错误:

  • 因此,我使用LiveData和ViewModel设置获取和插入数据的功能,并使用Room数据库保存数据。 将数据插入数据库后,我的RecyclerView不会更新数据。 RecyclerAdapterTransaksi.kt 使用RecyclerView显示数据库数据的片段 Pemasukkanframent。kt 使用LiveData的ViewModel类 TransaksiViewModel.

  • 在这种情况下,我希望返回,但当我执行代码时,它会引发一个异常,并带有以下消息: 提供的值为空 我不能使用,因为Dao返回的是,所以应该返回相同的类型。 在不改变DAO的情况下,如何检查用户是否存在?

  • 我是一个拥有ROOM,RXJava和Android的新手。 在Android应用程序测试中,REST服务检索用户列表。如果用户已经存在,则必须修改此列表。如果该用户不存在,则将该用户插入到数据库中。如果用户已经存在,则不插入该用户。 在活动中的验证如下: Iserdao consiste en lo Siguiente: El UserRepository contiene lo siguient

  • 如果我在room数据库实体中使用JSONObject,我会遇到一个问题。 我有三个类,第一个类是FormEntity,它有一个子类FormDataEntity,而这个FormDataEntity类有一个子类,它有JSONObject。因此,我从api获取数据,其中有一个名为“GFPDF_FORM_Settings”的JSONObject。在此输入图像说明 因此,当从API中使用GSON转换获取数据

  • 问题内容: 我正在使用jdbc编写程序,该程序将成为数据库的接口(类似于CRUD应用程序)。我假设我必须编写一个类(例如),该类将对数据库执行所有操作(以及可能会简化为这些操作的某些其他逻辑)。用户界面由一组表和一些按钮组成。要使用Jtable,我需要实现一个类(例如),它是AbstractTableModel的子类。因此,此类将向用户显示我的数据。我需要为数据库架构中的所有表实现这种模型。我不想