У меня есть модель представления, эта модель представления извлекает некоторые данные с сервера, который абстрагирован в 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