Слушатель обратного вызова не звонит Android ViewModel - PullRequest
0 голосов
/ 24 января 2020

У меня есть модель представления, эта модель представления извлекает некоторые данные с сервера, который абстрагирован в localBodiesRepository, и я установлю слушателя из действия, но слушатель вообще не вызывается

private const val FETCHED = true
private const val NOT_FETCHED = false

class HomeViewModel(
    private val employeeRepository: EmployeeRepository,
    private val localBodiesRepository: LocalBodiesRepository,
    private val preference: PreferenceProvider
): ViewModel() {
    var mLocalBodiesFetchingListener: LocalBodiesFetchingListener ? = null
    init {
        mLocalBodiesFetchingListener ? .onStarted()
        Coroutines.main {
            try {
                val response = localBodiesRepository.getDistricts()
                if (response.status == "success") {
                    localBodiesRepository.saveDistricts(response.districts)
                    preference.setDistrictFetched(FETCHED)
                    mLocalBodiesFetchingListener ? .onSuccess()
                } else {
                    preference.setDistrictFetched(NOT_FETCHED)
                    mLocalBodiesFetchingListener ? .onFailure(
                        "Loading data failure\nPlease close app and open again"
                    )
                }
            } catch (e: ApiException) {
                preference.setDistrictFetched(NOT_FETCHED)
                mLocalBodiesFetchingListener ? .onFailure(
                    e.message !! .plus(
                        "\nLoading data failure\nPlease close app and open again"
                    )
                )
            } catch (e: NoInternetException) {
                preference.setDistrictFetched(NOT_FETCHED)
                mLocalBodiesFetchingListener ? .onFailure(
                    e.message !! .plus(
                        "\nLoading data failure\nPlease close app and open again"
                    )
                )
            }
        }
    }

, и я установил слушателя из моей домашней активности

class HomeActivity: AppCompatActivity(),
KodeinAware,
LocalBodiesFetchingListener {
    override val kodein by kodein()
    val location: Location by instance()
    val api: AppApi by instance()
    val db: AppDatabase by instance()
    private lateinit
    var homeViewModel: HomeViewModel
    private val factory: HomeViewModelFactory by instance()
    private lateinit
    var binding: ActivityHomeBinding
    override fun onCreate(savedInstanceState: Bundle ? ) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
        homeViewModel = ViewModelProviders.of(this, factory)
            .get(HomeViewModel::class.java)
        binding.homeViewModel = homeViewModel
        homeViewModel.mLocalBodiesFetchingListener = this
        binding.lifecycleOwner = this
        progressDialog = ProgressDialog(this)
            .apply {
                setMessage("Loading data please wait...")
                setCancelable(false)
                show()
        }
    }
    override fun onStarted() {
        progressDialog ? .show()
    }
    override fun onSuccess() {
        progressDialog ? .dismiss()
    }
    override fun onFailure(message: String) {
        progressDialog ? .dismiss()
        errorToast(message)
    }

progressDialog вообще не отображается, я не знаю, почему он не звонит, но когда я отлаживал, я обнаружил, что слушатель нулевой, может быть, это проблема , тогда что мне нужно сделать

Почему mLocalBodiesFetchingListener является нулевым, когда я отлаживаю ViewModel

...