ProgressBar 未在 MVVM 模式中显示和观察

ProgressBar not showing and observing in MVVM pattern

我正在尝试观察进度条,我觉得一切正常,但它不起作用.. 当它到达视图模型时,它得到空值..

这是存储库:

val isLoadingProgressBarMutableLiveData = MutableLiveData<Boolean>()

    fun getEmployeeListFromAPI(): MutableLiveData<List<Employee>> {

        isLoadingProgressBarMutableLiveData.value = true
        val apiRequest: APICallRequest = APIRequest.retrofitCallGetList


        apiRequest.callEmployeeList().enqueue(object : Callback<EmployeesListResult?> {
            override fun onResponse(
                call: Call<EmployeesListResult?>,
                response: Response<EmployeesListResult?>
            ) {
                Log.e("onResponse1", "${isLoadingProgressBarMutableLiveData.value}")
                if (response.isSuccessful) {
                    isLoadingProgressBarMutableLiveData.value = false
                    mutableListLiveData.value = response.body()?.getEmployeesListResult
                    Log.e("onResponse2", "${isLoadingProgressBarMutableLiveData.value}")
                    Log.e("onResponse", "Success!")
                    Log.e("Response:", "${response.body()}")
                }

            }

            override fun onFailure(call: Call<EmployeesListResult?>, t: Throwable) {
                Log.e("onFailure", "Failed getting list: ${t.message}")
                isLoadingProgressBarMutableLiveData.value = false
            }
        })

        return mutableListLiveData

    }

fun getLoadingState() : MutableLiveData<Boolean>{
    return isLoadingProgressBarMutableLiveData
}

“onResponse1”=真 “onResponse2”=假

但是当我将它移动到 ViewModel 时,我得到 null ...

这是视图模型:

class MainViewModel : ViewModel() {

    fun getEmployeeListFromRepo() : LiveData<List<Employee>>{

        return MainRepository().getEmployeeListFromAPI()
    }

    fun showProgressBar(): LiveData<Boolean> {
        Log.e("Progress","ddd ${MainRepository().getLoadingState().value}")
        return MainRepository().getLoadingState()
    }


}

“进度条”= 为空

并且在 activity 中:

mainViewModel.showProgressBar().observe(this, object : Observer<Boolean?> {
    override fun onChanged(isLoading: Boolean?) {
        Log.e("isLoadingProgressBar:", "Loading is...: $isLoading")
        if (isLoading == true){
            progressBar.visibility = View.VISIBLE
        }else{
            progressBar.visibility = View.GONE
        }
    }
})

Buddy - 每次您 MainRepository() 您都在创建一个 new 存储库并访问它。您应该有 一个 个您正在使用的存储库。

class MainViewModel : ViewModel() {
    private val repository = MainRespository() // ONE repo

    fun getEmployeeListFromRepo() : LiveData<List<Employee>>{

        return repository.getEmployeeListFromAPI() // Get the live data to the ONE repo instead of creating a new one
    }

    fun showProgressBar(): LiveData<Boolean> {
        // Print and return the value from the ONE respository instead of creating
        // TWO new ones in this method
        Log.e("Progress","ddd ${respository.getLoadingState().value}")
        return respository.getLoadingState()
    }
}