如何强制(return)在(改造)完成之前不工作

How to force (return) to not work until after (retrofit) finished

你好,我正在尝试研究 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())

return Observable.just(model)

早 运行

Api.getData.getMainCategory(id)

所以 Logcat testingModel2 中的输出首先是空的,然后是 testingModel1 并且它有数据

所以结果数据在

return Observable.just(model)

没什么

希望大家理解^_^

感谢您的帮助

喜欢:

fun getData(id: Int, mainContract: MainContract): Observable<ArrayList<MainModel>> {
return Api.getData.getMainCategory(id)
    .subscribeOn(Schedulers.computation())
    .observeOn(AndroidSchedulers.mainThread())
}

但记得稍后订阅并添加ErrorHandling

关于日志:subscribe 块中的操作仅在 Api.getData.getMainCategory(id) 发出某些内容时运行的问题,这可能需要一些时间。