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

Android Livedata与RxJava单不工作在房间数据库

俞飞鸣
2023-03-14

我在Livedata上使用了Room和RxJavaSingle,但它不起作用<我试了两种方法。我不知道为什么第二个有效,为什么第一个无效。

(1)按单条获取列表-

@Dao
interface DiaryDao {
    @Query("SELECT * FROM Review")
    fun getAllReview() : Single<List<Review>>    // <- See the return type!
}

ViewModel我使用了Repository模式(dao的返回类型和Repository的返回类型相同)

    private val _reviewData = MutableLiveData<List<Review>>()
    val reviewData : LiveData<List<Review>>
        get() = _reviewData

    fun getAllReview(){
        addDisposable(repo.getAllReview()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                _reviewData.value=it
            },{
                Log.d(TAG, it.localizedMessage)
            })
        )
    }

碎片

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewModel.getAllReview()
        viewModel.reviewData.observe(viewLifecycleOwner) {
            ...
        }
    }

它在创建片段时工作,但数据在更改时不更新。

@Dao
interface DiaryDao {
    @Query("SELECT * FROM Review")
    fun getAllReview() : LiveData<List<Review>>    // <- See the return type!
}

视图模型

    private val _reviewData : LiveData<List<Review>> = repo.getAllReview()
    val reviewData : LiveData<List<Review>>
        get() = _reviewData

碎片

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewModel.reviewData.observe(viewLifecycleOwner) {
            // it works!
        }

    }

当数据发生变化时,它工作得很好。

我期待你的建议。

请让我知道,如果有任何额外的代码,你想看到。

共有1个答案

上官思博
2023-03-14

单身

 类似资料:
  • 我正在尝试使用RxJava在后台线程上使用我的RoomDatabase。 我的DAO类: 我的实体类(为简洁起见省略了getter和setter方法): 最后,这里是我的MeasurementDatabase类: 在我的片段中,我试图在单击菜单项后插入背景线程: 最终测量数据库appDb= 我收到一个错误,说: 我的RxJava代码中缺少了什么,没有将进程放在后台线程上?

  • 所以我需要从插入函数中取回插入项目的ID。包括来自Google的消息来源在内的多个消息来源都表示,可以通过作为@插入带注释DAO函数的返回值的单执行此操作。不幸的是,编译总是以以下方式退出: 我试着改成也许 我的代码如下所示: 我完全不知道是什么导致了这一切。那么,我做错了什么?如果这只是一个bug,那么在我的活动和这个活动数据的上下文中获取id的解决方法是什么? 更新:找到了一个非常奇怪的解决方

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

  • IIS可能会搞砸它?我倾向于认为IIS对于和)有不同的进程,因此,我在app.post上引用的套接字与我在()中加入用户是不同的。 在Azure/IIS中使用socket.io房间时有什么提示吗?谢了!

  • 房间数据库在mac book pro m1中不工作,我已经添加了id“kotlin kapt” android studio控制台日志的屏幕截图 哪里出错了:任务': app: kaptDebugKotlin'执行失败。 执行org.jetbrains.kotlin.gradle.internal时出错。KaptWithoutKotlincTask$KaptExecutionWorkAction

  • 我正在尝试获取消息的地图,作者id键如下: 这是我尝试过的: MessageViewModel.getAll()方法返回: 然后我将其转换为一个可流动的流(Flowable::fromIterable),这样它可以一次发出一个项目,而不是整个列表,然后我使用“toMultiMap”进行映射 on成功方法从不被调用,我不知道这里出了什么问题。如果我不使用toMultiMap(并对代码进行相应的修改)