【发布时间】: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