到这,估计很多人会问我:
- 你的code在哪里判断的?
- 我的code是100或者其它值才代表正确,怎么改?
- 我的Response<T>类里面的字段名,跟你的都不一样,怎么该?
- 你这成功的时候直接返回Response<T>里面的T,那我还要拿到code做其他的判断,执行不同业务逻辑,怎么办?
接着回答第4个问题,如何拿到code做其他的业务逻辑判断,很简单,我们只需用OnError接口处理错误回调即可,如下:
RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponse(Student.class)//返回Student类型.subscribe(student -> {//请求成功,这里能拿到 Student对象}, (OnError) error -> {//注意,这里要用OnError接口,其中error是一个ErrorInfo对象//失败回调//拿到code字段,此时就可以对code做判断,执行不同的业务逻辑int code = error.getErrorCode();String errorMsg = error.getErrorMsg()//拿到msg字段});
注:上面的OnError接口并非是RxHttp内部提供的,而是自定义的,在Demo里可以找到以上介绍的5个asXxx方法,可以说基本涵盖80%以上的业务场景,接下来我们看看RxHttp都提供了哪些asXxx方法,如下:
文章插图
RxHttp内部共提供了23个asXXX方法,其中:
- 有7个是返回基本类型的包装类型,如:asInteger、asBoolean、asLong等等;
- 还有7个是返回对象类型,如:asString、asBitmap、asList、asMap(3个)以及最常用asObject方法;
- 剩下9个是asParser(Parser<T>)、 asUpload系列方法及asDownload系列方法 。
3.3.3、第三部曲:订阅回调这一步就很简单了,在第二部曲中,asXxx方法会返回Observable<T>对象,没错,就是RxJava内部的Observable<T>对象,此时我们便可通过subscribe系列方法订阅回调,如下:
//不处理任何回调RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponseList(Student.class)//返回List<Student>类型.subscribe();//不订阅任何回调//仅订阅成功回调RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponseList(Student.class)//返回List<Student>类型.subscribe(students -> {//请求成功,这里能拿到List<Student>列表对象});//订阅成功与失败回调RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponseList(Student.class)//返回List<Student>类型.subscribe(students -> {//请求成功,这里能拿到List<Student>列表对象}, throwable -> {//请求失败});//等等,省略
另外,我们还可以订阅请求开始/结束的回调,如下:RxHttp.get("/service/...").asString().observeOn(AndroidSchedulers.mainThread()).doOnSubscribe(disposable -> {//请求开始,当前在主线程回调}).doFinally(() -> {//请求结束,当前在主线程回调}).as(RxLife.as(this))//感知生命周期.subscribe(pageList -> {//成功回调,当前在主线程回调}, (OnError) error -> {//失败回调,当前在主线程回调});
到这,请求三部曲介绍完毕,接着,将介绍其它常用的功能3.4、初始化
//设置debug模式,默认为false,设置为true后,发请求,过滤"RxHttp"能看到请求日志RxHttp.setDebug(boolean debug)//非必须,只能初始化一次,第二次将抛出异常RxHttp.init(OkHttpClient okHttpClient)//或者,调试模式下会有日志输出RxHttp.init(OkHttpClient okHttpClient, boolean debug)
此步骤是非必须的,如需要添加拦截器等其他业务需求,则可调用init方法进行初始化,不初始化或者传入null即代表使用默认OkHttpClient对象,建议在Application中初始化,默认的OkHttpClient对象在HttpSender类中可以找到,如下:private static OkHttpClient getDefaultOkHttpClient() {X509TrustManager trustAllCert = new X509TrustManagerImpl();SSLSocketFactory sslSocketFactory = new SSLSocketFactoryImpl(trustAllCert);return new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).readTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).sslSocketFactory(sslSocketFactory, trustAllCert) //添加信任证书.hostnameVerifier((hostname, session) -> true) //忽略host验证.build();}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 给你百万年薪,让你担任公司的架构师,你知道该做哪些事吗?
- 治眼疾茶方推荐
- 台灯什么角度最保护眼睛,写作业台灯的正确摆放位置
- 怎样看台灯伤不伤眼睛,台灯闪烁会伤眼睛吗
- 肚脐眼到底能不能抠?抠了会什么样的后果,你知道吗
- 索隆的眼睛怎么回事 索隆的一只眼睛怎么瞎的
- 10款自制减肥茶 让你轻松享瘦
- 阴阳眼可以看见什么 阴阳眼的人能看到什么
- 减辐射护眼睛 每天宜喝四杯茶
- 双眼皮疤痕增生的前兆有哪些