Observer value cleared when using Dagger hilt
02:32 18 Mar 2022

I am new to dagger hilt (DI), And I Implement dagger hilt (DI) in my project. Now I am trying to inject the ViewModel. It works fine. But in the API result, I am using mutableLivedata for updating value from the view model to view with the observer. The observer listens and fetches the value works fine. But I read the observed data value; it cleared the value. I don't know why it happened. Can anyone help me to find this?

Login Fragment

@AndroidEntryPoint
class LoginFragment : BaseFragment(FragmentLoginBinding::inflate) {
private val viewModel by viewModels()
  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewActionListeners()
        setUpViewModelObserver()
    }
    
     private fun setUpViewModelObserver() {
        viewModel.users.observe(viewLifecycleOwner) { response ->
            AppLog.e("validateResponse", response.toString())
            when (response.status) {
                Status.SUCCESS -> {
                    binding.frmLayoutProgress.visible(false)                
                    response.data?.let { users -> AppLog.e("AuthenticationMethod",users.clientResponse.authenticationMethod) }
                }
                Status.LOADING -> {
                    binding.frmLayoutProgress.visible(true)
                }
                Status.ERROR -> {
                    //Handle Error
                    binding.frmLayoutProgress.visible(false)
                    AppLog.e("Error:", response.message.toString())

                }
            }
        }

    }
 }

If you comment the lineAppLog.e("AuthenticationMethod",users.clientResponse.authenticationMethod) }it return the value if uncomment response returns set to be null.

LoginViewModel

@HiltViewModel
class LoginViewModel @Inject constructor(
    private val repository: LoginRepository,
    private val networkHelper: NetworkHelper
) : ViewModel() {
    val users: MutableLiveData> = MutableLiveData()

    fun loadValidateUser(email: String) {
        viewModelScope.launch {
            users.postValue(Resource.loading(null))
            if (networkHelper.isNetworkConnected()) {
                repository.getValidateUser(email).let {
                    if (it.isSuccessful) {
                        users.postValue(Resource.success(it.body()))
                    } else users.postValue(Resource.error(it.errorBody().toString(), null))
                }
            } else users.postValue(Resource.error("No internet connection", null))
        }
    }

}

LoginRepository

class LoginRepository @Inject constructor(private val apiHelper: AuthApiHelper) {
    suspend fun getValidateUser(email: String) = apiHelper.getValidateUser(email)
}

AuthApiHelper

interface AuthApiHelper {
    suspend fun getValidateUser(email: String): Response
}

ResponseValidateUser


data class ResponseValidateUser(
    @SerializedName("clientResponse") val clientResponse: ClientResponse,
    @SerializedName("status") val status: String,
    @SerializedName("errorMessage") val errorMessage: String
)
android kotlin dagger-2 dagger-hilt