Android中改型API响应的延迟初始化
嗨,朋友们,这是我的代码,它是我的Android中改型API响应的延迟初始化,android,kotlin,retrofit2,kotlin-coroutines,lazy-initialization,Android,Kotlin,Retrofit2,Kotlin Coroutines,Lazy Initialization,嗨,朋友们,这是我的代码,它是我的ProfileViewModel的一部分,由两个片段使用, 我希望在有用时获取该值,因为我将此ViewModel用于两个片段。所以我 不想在不使用它时进行初始化,我如何通过惰性初始化将其存档,这里 响应是由改进返回的响应,这里是在 Dispatchers.IO,响应由我的函数makeApiCall解析,它可以处理 使用密封类Result成功和错误,因此如果成功,它将返回响应 否则为空,也可以在具有相应功能的相应片段中观察到响应, 下面是我的代码 val prof
ProfileViewModel
的一部分,由两个片段使用,
我希望在有用时获取该值,因为我将此ViewModel用于两个片段。所以我
不想在不使用它时进行初始化,我如何通过惰性初始化将其存档,这里
响应是由改进返回的响应,这里是在
Dispatchers.IO,响应由我的函数makeApiCall
解析,它可以处理
使用密封类Result
成功和错误,因此如果成功,它将返回响应
否则为空,也可以在具有相应功能的相应片段中观察到响应,
下面是我的代码
val profile: ProfileModel by lazy { getProfile() }
init {
getProfile()
}
fun getProfile() {
Coroutines.io {
makeApiCall(
ProfileFragment.REQUEST_CODE_PROFILE
){
repository.getProfile()
}?.let { response ->
form.name.postValue(
response.profile.name
)
profile = response.profile
}
}
}
如果需要,为什么不在需要时调用
getProfile()
。不要在init
块中调用它。也不要委托该属性。只需初始化它或将其保持为空。你应该需要一个LiveData
来获取加载状态回调。我是从interner上的很多sarch那里得到它的。最后,我发现有趣的Lazydered(block:suspend-CoroutineScope.(->T):Lazy{return Lazy{GlobalScope.async(start=CoroutineStart.Lazy){block.invoke(this)}现在,在LazyDelferred{makeApiCall(ProfileFragment.REQUEST_code_profile){repository.getProfile()}?.profile}编写的我的代码val概要文件中,以及在我的片段Coroutines.main{binding.profile=viewModel.profile.wait()}中,谢谢@ADM