Rxjava配合Retrofit

Rxjava配合Retrofit

doOnNext()可以在不订阅的情况下更新UI。

实例

一步实现注册 – 更新UI – 登录

RetrofitClient.createRetrofit().create(ApiService::class.java)
                .register("6784321dfwed","1234567","1234567") //上游子线程执行下载任务
                .subscribeOn(Schedulers.io())  //设置上游为子线程
                .observeOn(AndroidSchedulers.mainThread()) //设置更新UI位置为主线程
                .doOnNext(object : Consumer{ //执行更新UI的操作
                    override fun accept(t: ResponseBody?) {
                        //更新UI
                    }
                })
                .observeOn(Schedulers.io()) //切换线程到子线程 
                .flatMap(object : Function>{   
                    override fun apply(t: ResponseBody): Observable {
                        return RetrofitClient.createRetrofit().create(ApiService::class.java).login("6784321dfwed","1234567")  //子线程中执行下载操作
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())  //将线程切换为主线程
                .subscribe(object : Observer{
                    override fun onComplete() {
                        dismissDialog()
                    }

                    override fun onSubscribe(d: Disposable) {
                        disposable = d
                        progressDiag = ProgressDialog(instance)
                        progressDiag!!.setMessage("登录中。。。")
                        progressDiag!!.show()
                    }

                    override fun onNext(t: ResponseBody) {
                        var infos = t.string()
                        Log.e("registerAndLogin","onNext=$infos")
                    }

                    override fun onError(e: Throwable) {
                        e.printStackTrace()
                        dismissDialog()
                    }
                })

除了上游部分用subscribeOn设置线程外,其他所有涉及到切换线程的部分均使用observeOn

你可能感兴趣的:(RxJava的使用)