【问题标题】:LiveData in view model not being set and is null视图模型中的 LiveData 未设置且为空
【发布时间】:2020-02-07 21:41:20
【问题描述】:

我有以下ViewModel

class MainViewModel  @Inject constructor(private val mainRepository: MainRepository) : ViewModel(){
    private var _user: LoggedInUser? = null

    val allProjects: MutableLiveData<Array<Project>> = MutableLiveData()


    fun setUser(loggedInUser: LoggedInUser){
        _user = loggedInUser
        getAllProjects()
    }

    fun getAllProjects(): LiveData<Array<Project>> {
        println("MVM: In get all projects")
        allProjects.value = mainRepository.getAllProjects(_user!!.token).value
        println(" AFTER ${Arrays.toString(allProjects.value)}")
        return mainRepository.getAllProjects(_user!!.token)
    }
}

当我调用 setUser()getAllProjects() 时,数据未设置。在 After 打印语句中,我得到 null。

MainRepository:

@Singleton
class MainRepository {
    var job: CompletableJob? = null

    fun getAllProjects(auth: String): LiveData<Array<Project>> {
        println("REPO: In get all projects")
        val data = MutableLiveData<Array<Project>>()
        var job = Job()
        job?.let {theJob ->
            CoroutineScope(context = Dispatchers.IO + theJob).launch {
                val projects = RetrofitBuilder.apiService.getAllProjects("Bearer " + auth)
                withContext(Dispatchers.Main){
                    data.value = projects
                    println("INSIDE: ${Arrays.toString(projects)}")
                    theJob.complete()
                }
            }
            println("getAllProjects DATA: ${Arrays.toString(data.value)}")
            return data
        }
    }

    fun cancelJobs(){
        job?.cancel()
    }
}

这里 INSIDE 打印语句打印出数据,而 getAllProjects DATA 打印空值。在我的活动中,我都有一个观察者,它在 LiveData 更改时触发并且也打印出 null(我这样做是为了调试而不用担心异步调用),我还有一个按钮可以打印出实时数据——这也是空。

有人知道我怎样才能让它工作吗?

【问题讨论】:

  • 您尝试登录了吗?你从哪里得到空值?存储库或视图模型?

标签: android kotlin android-livedata mutablelivedata


【解决方案1】:

使用 postValue。我的猜测是您使用的 setValue 不在主线程中

【讨论】:

  • 我在存储库和视图模型中都使用了 post 值,但我仍然有相同的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2015-10-31
相关资源
最近更新 更多