Android 有没有办法将var-toyList设计为LiveData<;列表<;ToyEntry>&燃气轮机;在ViewModel中?

Android 有没有办法将var-toyList设计为LiveData<;列表<;ToyEntry>&燃气轮机;在ViewModel中?,android,android-jetpack,Android,Android Jetpack,以下代码来自 作者将var-toyList设计为MainViewModel中的LiveData? 我想如果我把var-toyList设计成LiveData会更好,我该怎么做 class MainViewModel(application: Application) : AndroidViewModel(application) { var toyList: LiveData<List<ToyEntry>>? = null get() {

以下代码来自

作者将
var-toyList
设计为MainViewModel中的
LiveData?

我想如果我把
var-toyList
设计成
LiveData
会更好,我该怎么做

class MainViewModel(application: Application) : AndroidViewModel(application) {  
    var toyList: LiveData<List<ToyEntry>>? = null
        get() {
            return field ?: mRepo.toyList.also { field = it }
        }
    ...
}


class ToyRepository private constructor(private val mDatabase: ToyDatabase, private val mExecutors: AppExecutors) {
    val toyList: LiveData<List<ToyEntry>>
        get() = mDatabase.toyDao().allToys
    ...
}



interface ToyDao {
    @get:Query("SELECT * FROM toys")
    val allToys: LiveData<List<ToyEntry>>
    ...
}
class MainViewModel(应用程序:应用程序):AndroidViewModel(应用程序){
var toyList:LiveData?=null
得到(){
返回字段?:mRepo.toyList.allow{field=it}
}
...
}
类ToyRepository私有构造函数(私有val mDatabase:ToyDatabase,私有val mExecutors:AppExecutors){
val-toyList:LiveData
get()=mDatabase.toyDao().allToys
...
}
接口ToyDao{
@获取:查询(“选择*来自玩具”)
val allToys:LiveData
...
}

如果您想通过不可为空的LiveData更改可为空的LiveData,使用相同的方法,观察另一个LiveData,那么您可以使用以下转换:

val toyList: LiveData<List<ToyEntry>> = Transformations.map(mRepo.toyList) {
    it 
}
val-toyList:LiveData=Transformations.map(mRepo.toyList){
信息技术
}

谢谢!您的代码运行良好,而且
var-toyList:LiveData=mRepo.toyList
也运行良好,我不明白作者为什么要使用
var-toyList:LiveData?=null get(){…}
!,你能告诉我吗?如果反应不错,请给它打分!我建议作者使用一个可为null的变量来返回字段数据,以避免再次从repo获取数据。。。但不建议在viewmodel之外使用livedata。。。在存储库中避免使用它们。。。如果你将来需要一个反应性应用程序,你可以使用Flow或Rx,如果你只需要在同一点上的反应性,你可以使用observer模式