首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用数据绑定库从房间数据库中观察LiveData的变化

如何使用数据绑定库从房间数据库中观察LiveData的变化
EN

Stack Overflow用户
提问于 2017-11-01 22:30:13
回答 2查看 2.1K关注 0票数 2

第一次实现机房和数据绑定。

在我的ViewModel

代码语言:javascript
运行
复制
var numberOfClubs = ObservableInt(0)
private var clubs: LiveData<List<Club>> = clubDao.getAllClubs()

然后,在插入Room数据库之后,我尝试获取clubs.value,但每次都会得到一个KotlinNullPointerException

代码语言:javascript
运行
复制
fun addClubs() {
    Observable.fromCallable({
        clubDao.insertClubs(listOf(Club(null, "clubName"))
    })
        .subscribeOn(schedulerFacade.computation)
        .subscribe(
            {
                numberOfClubs.set(clubs.value!!.size) <--- Kotlin NPE
            },
            { error ->
                logWrapper.e("MainViewModel", error.message!!)
                clubError.set(true)
            })
}

在我的XML中,我调用:android:text="@{viewModel.numberOfClubs}"

由于插入到Room数据库不会导致返回任何内容,所以我无法设置带有结果的numberOfClubs。我认为clubs应该跟踪更改吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-04 15:13:49

是我对LiveData的一点误解。为了让一个LiveData对象开始发射东西,就是要对它进行.observe()。因为LiveData知道生命周期,所以最好从FragmentActivity中调用.observe(),因为它具有对LifecycleOwner的引用,这必须是传递到.observe()的第一个参数。

我可能没有遵循最佳实践,因为我在ViewModel中从ViewModel中设置了一个Activity,但是我使用了:

代码语言:javascript
运行
复制
viewModel.clubs
    .observe(this, Observer { clubs ->
        viewModel.numberOfClubs.set(clubs!!.size)
    })
票数 0
EN

Stack Overflow用户

发布于 2017-11-04 15:53:16

是的,正如您已经发现的,LiveData是生命周期感知的。这意味着只要livecycle在场,它就会进行观察。

即使你已经发布了解决方案,你也不应该使用!完全没有。

代码语言:javascript
运行
复制
viewModel.clubs.observe(this, {
    it?.let { 
       viewModel.numberOfClubs.set(it.size)
    }
)

是在分配接收列表大小之前执行空检查的正确方法。

顺便说一句,如果您想在布局中获得项目大小,您应该使用

代码语言:javascript
运行
复制
text="@{viewModel.clubsList.size() + ``}" 

并观察一个列表,而不是使用

代码语言:javascript
运行
复制
val clubsList = ObservableArrayList<..>() 

viewModel.clubs.observe(this, {
    it?.let { 
       viewModel.clubsList.set(it)
    }
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47064687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档