【发布时间】:2020-04-02 11:09:34
【问题描述】:
你好我正在研究dataBinding、mvvm、retrofit和rxjava
在 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 中我使用了 RxJava 代码的改造
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())
和
返回 Observable.just(模型)
在之前运行
Api.getData.getMainCategory(id)
所以 Logcat testingModel2 中的输出首先是空的,然后是 testingModel1,它有数据
所以结果数据在
返回 Observable.just(模型)
什么都没有
希望你能理解^_^
感谢您的帮助
【问题讨论】:
标签: android android-studio kotlin rx-java