为什么我的 Android ViewModel 不能持久化数据?

Why my Android ViewModel cannot persistent data?

我正在使用 Jetpack Compose 进行编程。
我从网络请求数据并将其保存到 Composable 中的 ViewModel,
但是当我想在其他 Composable 中使用数据时,ViewModel returns null

// ViewModel:
class PartViewModel : ViewModel() {
    private val mPicRepository: PicRepository = PicRepository()

    private val _partsResult: MutableLiveData<PicResp> = MutableLiveData()
    val partsResilt: LiveData<PicResp> get() = _partsResult
    fun getPartsFromImage(id: Long) {
        mPicRepository.getCloudPic(id, _partsResult)
    }
}
// Composable which request data
@Composable
fun PagePhotoDetail(imageId: Long, navController: NavHostController) {
    val vm: PartViewModel = viewModel()
    vm.getPartsFromImage(imageId)

    partsState.value?.data?.let {
        Logger.d(it.parts)        // this log show correct data
    }
}
// Composable which use data
@Composable
fun PagePartListFromImage(navController: NavHostController) {
    val vm: PartViewModel = viewModel()
    Logger.d(vm.partsResilt.value)        // this log cannot get data and show null
}

您正在创建视图模型的两个不同实例。您需要像 val vm by viewmodels<PartViewModel>

这样初始化视图模型

然后将此视图模型作为参数传递到可组合项中。大功告成!

好吧,如果您仍然希望在可组合项中初始化它,您可以使用 val vm by viewmodel<PartViewModel>

viewModel<> 而不是 viewModels<>