Kotlin 如何在将LiveData分配给变量之前调整Room数据库中的LiveData

Kotlin 如何在将LiveData分配给变量之前调整Room数据库中的LiveData,kotlin,android-room,android-livedata,Kotlin,Android Room,Android Livedata,我在自学Kotlin,基于一些非常古老的编码知识,所以我可能遗漏了一些非常明显的东西 基本上,每次从Room数据库返回LiveData时,我都会稍微调整一些LiveData。LiveData是一个键值对,我想确保即使请求的项不在数据库中,也会分配键值,这样LiveData永远不会为null。我已经尝试了很多方法来实现这一点——最近使用的是LiveData builder,但它往往会在第一次返回null,然后再也不会更新。我想,我希望LiveData builder能够解决的问题是,LiveDat

我在自学Kotlin,基于一些非常古老的编码知识,所以我可能遗漏了一些非常明显的东西

基本上,每次从Room数据库返回LiveData时,我都会稍微调整一些LiveData。LiveData是一个键值对,我想确保即使请求的项不在数据库中,也会分配键值,这样LiveData永远不会为null。我已经尝试了很多方法来实现这一点——最近使用的是LiveData builder,但它往往会在第一次返回null,然后再也不会更新。我想,我希望LiveData builder能够解决的问题是,LiveData没有及时从数据库返回以进行调整

我知道我可以用两个LiveData对象来实现这一点——观察直接来自数据库的一个对象,然后在将其分配给第二个变量之前执行调整——但我将用大量变量来实现这一点,而且必须有一种更干净的方法

这是我最后一次尝试

在ViewModel中:

    val myLiveData = liveData {
        val rawLiveData = database.get("key")
        emit(myDataClass("key", rawLiveData.value?.plotInput.toString().trim()))
    }
在道

    @Query("SELECT * from database_table WHERE key = :key")
    fun get(key: String): LiveData<myDataClass?>

我希望这是清楚的,而不是一个太愚蠢的问题

我认为推荐的方法是通过转换来实现这一点,有关详细信息,请参见


这就是说,LiveData似乎即将退出市场,Android的移动速度很快!你可能想考虑使用它。

从房间查询返回活着不是一个好方法。LiveDate是一个生命周期组件,最好不要在逻辑中使用它


有更好的选择,如流动。它是反应性的,更清洁。此外,只需将suspend关键字添加到方法签名并返回模型类本身,就可以使用协同路由。

谢谢。我想我误解了转换的目的。我还认为流是针对值字符串的,而不是针对单个值的,但我一定错了。我会调查这些!