привет Я пытаюсь изучить dataBinding, mvvm, retrofit и rx java
в viewModel Я использовал этот код
private var mainRepository: MainRepository = MainRepository(NetManager(getApplication()))
val isLoading = ObservableField(false)
var mainModel = MutableLiveData<ArrayList<MainModel>>()
private val compositeDisposable = CompositeDisposable()
fun loadRepositories(id: Int, mainContract: MainContract) {
isLoading.set(true)
compositeDisposable += mainRepository
.getData(id, mainContract)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableObserver<ArrayList<MainModel>>() {
override fun onError(e: Throwable) {
//if some error happens in our data layer our app will not crash, we will
// get error here
}
override fun onNext(data: ArrayList<MainModel>) {
mainModel.value= data
}
override fun onComplete() {
isLoading.set(false)
}
})
}
и в MainRepository я использовал модификацию с Rx Java код
private val model = ArrayList<MainModel>()
fun getData(id: Int, mainContract: MainContract): Observable<ArrayList<MainModel>> {
Api.getData.getMainCategory(id)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ({
model.clear()
model.addAll(it)
AppLogger.log("testingModel1", model.toString())
}, {
AppLogger.log("error", "Failed to load Category : $it")
mainContract.toast("Failed to load Category")
})
AppLogger.log("testingModel2", model.toString())
return Observable.just(model)
}
, если вы сообщили, что я использую журнал для просмотра выходных данных, но я вижу, что
AppLogger.log ("testingModel2" , model.toString ())
и
return Observable.just (модель)
работают до
Api.getData.getMainCategory (id)
, поэтому сначала выводится в Logcat testingModel2, и он пуст, затем testingModel1, и он имеет данные
, поэтому данные результата в
return Observable.just (модель)
- ничто
Надеюсь, вы понимаете ^ _ ^
Спасибо за помощь