ViewModel不会触发mutablelivedata的观察者

问题描述 投票:0回答:1

我有以下ViewModel类-

class VerifyOtpViewModel : ViewModel() {

    private var existingUserProfileData: MutableLiveData<TwoVerteUsers.TwoVerteUser>? = null

    fun checkInfoForAuthenticatedUser(authorization: String, user: String) {
        ProfileNetworking.getUsersProfiles(authorization, GetUserProfilesBodyModel(listOf(user)), object : ProfileNetworking.OnGetUserProfilesListener {
            override fun onSuccess(model: TwoVerteUsers) {
                existingUserProfileData?.value = model[0]
            }

            override fun onError(reason: String) {
                Log.d("existingProfile", reason)
            }
        })
    }

    fun getExistingUserProfileData(): LiveData<TwoVerteUsers.TwoVerteUser>? {
        if (existingUserProfileData == null) return null
        return existingUserProfileData as LiveData<TwoVerteUsers.TwoVerteUser>
    }
}

和以下观察者-

private fun initViewModel() {
        verifyOtpViewModel = ViewModelProvider(this).get(VerifyOtpViewModel::class.java)
        verifyOtpViewModel.getExistingUserProfileData()?.observe(this, Observer {
            if (it != null)
                Log.d("existingProfile", it.username)
        })
    }

出于某种原因,即使在给MutableLiveData对象赋予值之后,也永远不会触发观察值

试图在stackoverflow上搜索解决方案,但无济于事

我想念什么?

android viewmodel android-livedata observer-pattern
1个回答
0
投票

将您的代码重构为此,您应该会很好:

class VerifyOtpViewModel : ViewModel() {

    private val _existingUserProfileData = MutableLiveData<TwoVerteUsers.TwoVerteUser>()
    val existingUserProfileData: LiveData<TwoVerteUsers.TwoVerteUser>
        get() = _existingUserProfileData

    fun checkInfoForAuthenticatedUser(authorization: String, user: String) {
        ProfileNetworking.getUsersProfiles(
            authorization,
            GetUserProfilesBodyModel(listOf(user)),
            object : ProfileNetworking.OnGetUserProfilesListener {
                override fun onSuccess(model: TwoVerteUsers) {
                    existingUserProfileData.value = model[0]
                }

                override fun onError(reason: String) {
                    Log.d("existingProfile", reason)
                }
            })
    }
}

并观察:

verifyOtpViewModel.existingUserProfileData.observe(this, Observer {
   .....
})

© www.soinside.com 2019 - 2024. All rights reserved.