【问题标题】:how to use liveData coroutine block如何使用 liveData 协程块
【发布时间】:2019-07-19 09:03:57
【问题描述】:

如何使用liveData协程块

在官方文档中

https://developer.android.google.cn/topic/libraries/architecture/coroutines#livedata

现在可以在 liveData 块中将 livedata 与协程一起使用

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

当我尝试这样使用时

fun onLogin(v: View) {
    liveData(context = Dispatchers.IO) {
        val reqLogin = ReqLogin(account = account.value?:"", password = MD5(password.value?:""))
        val data = HttpManager.service(MobileApi::class.java).loginSuspend(reqLogin)
        emit(data.data!!)
    }
}

块中的代码未执行

搜索发现liveData块总是用于赋值

https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54

如果想刷新 livedata 值,可以使用 Transformations like

LiveData<Repo> repo = Transformations.switchMap(repoIdLiveData, repoId -> {
    if (repoId.isEmpty()) {
        return AbsentLiveData.create();
    }
    return repository.loadRepo(repoId);
});

但是我该如何使用它 1.活动onResume并刷新服务器数据 2. 一些点击事件触发请求并获取一些新数据显示

在我的登录场景中,使用 viewModelScope 似乎更有用

fun onLogin(v: View) {
    val reqLogin = ReqLogin(account = account.value ?: "", password = MD5(password.value ?: ""))
    viewModelScope.launch {
        val data = withContext(Dispatchers.IO) {
            HttpManager.service(MobileApi::class.java).loginSuspend(reqLogin)
        }
        _userInfo.value = data.data!!
        _isLogin.value = true
    }
}

【问题讨论】:

    标签: android-livedata


    【解决方案1】:
        fun onLogin(v: View) {
        liveData(context = Dispatchers.IO) {
            val reqLogin = ReqLogin(account = account.value?:"", password = MD5(password.value?:""))
            val data = HttpManager.service(MobileApi::class.java).loginSuspend(reqLogin)
            emit(data.data!!)
        }
    }
    

    代码块没有被执行,因为文档说

    代码块在 LiveData 变为活动状态时开始执行并且是 当 LiveData 设置超时后自动取消 变为非活动状态。

    你应该通过观​​察它来激活它。

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多