Android LiveData转换:更改LiveData对象值

问题描述 投票:0回答:1

我有一个LiveData对象,该对象包含一个用户列表,我正尝试将数据传输到另一个LiveData对象,以在其他地方使用。

我在Room中使用MVVM,所以我从数据库和ViewModel上获取LiveData,我试图将LiveData中的User对象转换为Person对象以显示在UI中。

所以我有一个变量是LiveData<List<User>>

class User(var firstName: String, var lastName: String, var age: Integer)

并且我正在尝试将其转换为LiveData<List<Person>>(例如)

class Person() {

    lateinit var firstName: String

    lateinit var age: Integer
}

而且我尝试更改它们的方法是使用LiveData Transformations.map

ViewModel:

val list2: LiveData<List<User>> = repo.getAll()
var liveList: LiveData<ArrayList<Person>> = MutableLiveData()
liveList = Transformations.map(list2) { list ->
    val newList: ArrayList<WeatherInfo> = ArrayList()
    list?.forEach {
        val temp = WeatherInfo()
        temp.firstName = it.firstName
        temp.age = it.age
        newList.add(temp)
    }
    return@map newList
}

但是当我运行它时,它崩溃或不更新UI。

谢谢!

android kotlin android-livedata android-jetpack
1个回答
0
投票

您的地图有些混乱。应该是Person而不是WeatherInfo:

liveList = Transformations.map(list2) { list ->
    val newList: List<Person> = ArrayList()
    list?.forEach {
        val temp = Person()
        temp.firstName = it.firstName
        temp.age = it.age
        newList.add(temp)
    }
    return@map newList
}

并且您应该检查logcat以查看崩溃信息。

© www.soinside.com 2019 - 2024. All rights reserved.