无法在LiveData中设置值



我无法将值设置为声明为MutableLiveDataLiveData变量。我试图设置的值是从存储库返回的LiveData

请在下面找到课程。

Viewmodel.class

// Variable to hold list of tasks Livedata
private val _tasks=MutableLiveData<List<TaskEntity>>()
val tasks:LiveData<List<TaskEntity>>
get() = _tasks
init{
getTasksFromDb()
}
private fun getTasksFromDb(){
viewModelScope.launch {
try {
_tasks.value=taskRepository.getAllTasks() // Showing error here
}catch(exception:Exception){
Log.d(TAG,"Error "+exception.message)
}
}
}

存储库

class TaskRepository (val taskDb: TaskDatabase){
suspend fun insert(taskEntity: TaskEntity)=
taskDb.taskDao.insert(taskEntity)
fun update(taskEntity: TaskEntity)=
taskDb.taskDao.update(taskEntity)
fun delete(taskEntity: TaskEntity)=
taskDb.taskDao.delete(taskEntity)
fun getAllTasks():LiveData<List<TaskEntity>> =
taskDb.taskDao.getAllTasks()
}

DAO

@Dao
interface TaskDao {
@Insert
fun insert(taskEntity: TaskEntity)
@Update
fun update(taskEntity: TaskEntity)
@Delete
fun delete(taskEntity: TaskEntity)
@Query("SELECT * FROM tasks")
fun getAllTasks():LiveData<List<TaskEntity>>
}

这里声明的变量以及我试图分配的值也是LiveData.Still,它给出了错误

Type mismatch: 
Required : List<Entity>, Found: LiveData<List<Entity>>

有人能帮我找出这里的问题吗?

这个错误不言自明。它需要一个列表,但您正在尝试分配一个LiveData。因此,例如,您可以从LiveData中获得如下值:

_tasks.value=taskRepository.getAllTasks().value

这应该可以消除错误,尽管我不确定这是否是正确的实现

如果在后台线程中工作,则不能使用setValue。您必须在这里使用postValue和一些观察者。

postValue("someNewData"(

首先Livedata.value需要一种类型的Livedata Generic

val liveData = MutableLiveData<Boolean>()
val liveDataTemp = MutableLiveData<Boolean>()
liveData.value = true //current
liveData.value = liveDataTemp //error

如果我目前理解你要观察活动或片段中的所有任务
以下代码可以帮助您
ViewModel

fun getAllTask():LiveData<List<TaskEntity>>(){
return taskRepository.getAllTasks()
}

活性或片段

viewModel.getAllTask().observer(this){
list -> TODO()
}

最新更新