Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中改型API响应的延迟初始化_Android_Kotlin_Retrofit2_Kotlin Coroutines_Lazy Initialization - Fatal编程技术网

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