澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

完美结合RxJava,0和RxJava的又一次完美改进加强

作者/Tamic

Tamic : http://www.jianshu.com/u/3bbb1ddf4fd5

简书 :Tamic原著地址:

本篇文章已授权微信公众号 guolin_blog 独家发表

图片 1

图片 2据说Retrofit2.0 封装的超好用的RetrofitClient

图片 3Novate

Tamic 只出高素质干货

最终的github的2.x分层项目曾经做对途达xjava2做了帮助,可活动下载。

用过ENCORExJava和Retrofit的爱侣,用久了就能发掘Retrofit说难轻易,说易亦不易,对于实际项目中,单纯的应用Retrofit做网络诉求库,开辟起来依旧有好些个不便,诸如必供给对央求头和参数处理,API接口数目众多的事态下处理起来也劳碌, 还也有Https证书验签,cookie长久,错误结果码管理,统一操作加载过渡UI等也设有困难,因而作者对Retrofit再一次实行了包装,一向关心我的爱侣在此以前看本人封装的《 基于Retrofit2.0 封装的超好用的RetrofitClient工具类》的一文,已对Retrofit结合EscortxJava时遭逢下边包车型客车标题开展了总体封装,比较多光景还未产生完美,亦不是和Retrofit源码同样的Builder格局,由此感觉仍然不太周详,特此作者实行了长达三个月Novate 框架的付出,给旧的HttpClent迁移到Retrofit2.0也是拉动了福音(没有必要开采者通晓昂科威xJava和Retrofit)。

奥迪Q3xJava1和Retrofit2组合的好用的RetrofitClient小编2018年写了一篇,后续有相恋的人私信须要跳级第二本子,本希图不维护了,但是众几人要用纳瓦拉xjava2,所以便举办了支撑奥迪Q7xjava2的升官,晋级历程中遇见了一些烦劳,经过一段时间的测量试验后,写了那篇小说,若是想要更要全体的职能请参见Novate.

基于Retrofit2.0封装的RetrofitClient.

本框架从八月问世以来,无论对入门凯雷德xjava依然实战retrofit的对象,或多或少的推动的仿效价值,无论你是copy源码依然使用maven方式。所以让自家有引力实行下一本子的加深!

RxJava1:

avancierxJava retrofit的请参见:
Android基于Retrofit2.0 奥迪Q5xJava 封装的超好用的RetrofitClient工具类

  • 制止重新创设Retrofit实列.
  • 调用方便简洁.
  • 毋庸重新载入参数属性的步骤.
  • 可一定配置 Host 也可动态配置Url、央浼头、参数等.
  • 支撑文件下载和上传.
  • 支撑json格局提交.
  • 支撑扩展APIService
  • 统一管理无互连网状态,和协理加载进程
  • 结合RxJava
  • 援救缓存机制
  • 优化撤销

*干什么起名称为Novate*

写在最前:

本次封装的优势:

  • 幸免重复创制Retrofit实列.

  • 调用方便简洁.

  • 没有要求再度设置属性的步骤.

  • 可一定配置 Host 也可动态配置Url、须要头、参数等.

  • 支撑文件下载和上传.

  • 扶助json,表单形式提交.

  • 协助扩展APIService

  • 集结处理无网络状态,和支撑加载进程

  • 支撑缓存机制,cookie同步

  • 优化撤消作用

此次笔者动用的是风尚福睿斯xjava2.1, Retrofit 2.3, okhttp3.8 进行支付的。别的版本差距请看官方表明。

兑现的进度能够看率先篇详细介绍!这里不在累赘,但值得注意的是 奥德赛xJava2最大的优势正是扩张了背压和 Flowable,收回Obserable权限等,除了包名爆发变化,一些类名也打开了变动,举例:Func就改为明亮Funtion, Action变为Customer, Transformer 变为 FlowableTransformer 还也许有支撑了Map操作符晋级的数组泛型扶助的mapArray等。

其余优势能够去库罗德xAava 的GItHub阅读:
https://github.com/ReactiveX/RxJava

Retrfoit在风靡的版本中也发生了变通,@PartMap将不补助申明Key指,提供了另一种方法@partList等, 这种方法得以让多文本上传变得尤为灵活:

public interface UpLoadApiService {

    @GET("service/upload")
    Flowable<BaseResponse<IpResult>> upload(
     @PartList   List<RequstBody> list);
}

运用原生的Retrofit央浼网络,熟练的相恋的人一定明白,在有个别ApiServie方法多时 Retrofit设置就体现有些麻烦,前日给大家带来对Retrofit的主导封装。本次对Retrofit进级篇,此番封装已参加RAV4xJava,请在翻阅下文前请先掌握奥迪Q5XJAVA和笔者写的Retrofit连串小说,

Novate的斯洛伐克共和国(The Slovak Republic)语原意是用新东西替代,作者付出目标是用新的东西来顶替Retrofit结合安德拉xjava共同开荒时的有个别正确操作的地点,因而起名新奇的东西,所以结合了本来的HttpClient用法习于旧贯,又参与了Retrofit和兰德奔驰G级xJava的特色,由此起名 :Novate

使用:

类型地址:https://github.com/Tamicer/RetrofitClient/commits/2.x

  • Retrofit 2.0别致实行,完美协理Https传输

  • Retrofit2.0健全同步Cookie达成免登陆

  • Retrofit 2.0 超能施行,轻巧完毕多文件/图片上传

进展下文前请先驾驭Retrofit和福睿斯xjava,未读书的请移步:

API姿势

Android基于Retrofit2.0 CR-VxJava 封装的超好用的RetrofitClient工具类

主干步骤:

数不胜数导读

GET

 RetrofitClient.getInstance(context)
                    .createBaseApi()
                    .get("url", maps)
                    .subscribe(new BaseSubscriber<T>(context) {});

构建Retrofit的接口service.

构建基础拦截器 Interceptor.

营造Cookie管理工科具CookieManger.

构建 单列RetrofitClient客户端.

RetrofitClient的使用.

  • Retrofit 2.0 超能实行,完美援助Https传输

  • Retrofit2.0 完美同步Cookie达成免登入

  • Retrofit 2.0 超能实施,轻便完成公文/图片上传

  • Retrofit 2.0 超能施行,达成大文件断点下载

  • 依照Retrofit2.0 封装的超好用的RetrofitClient工具类

  • 玩转IOC,教您空手实现自定义的Retrofit框架

  • Sportagexjava和Retrofit 要求调整的多少个实用工夫,缓存难题和集结对有无互联网拍卖难点

POST

 RetrofitClient.getInstance(MainActivity.this)
                    .createBaseApi()
                    .post("url", maps)
                    .subscribe( new BaseSubscriber<T>(context) {});

呼吁网络的API接口类,这里您能够追加你须求的呼吁接口,也可复用已经落实的多少个点子。

Novate的改进:

JSON

   RequestBody jsonbody = 
               RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), new Gson().toJson(user));

   RetrofitClient.getInstance(MainActivity.this)
                  .createBaseApi()
                  .json("url", jsonBody)
                  .subscribe( new BaseSubscriber<T>(context) {});
 /*** Created by Tamic on 2016-07-08.*/ public interface ApiService {public static final String Base_URL = "http://ip.taobao.com/";/** *普通写法 */@GET("service/getIpInfo.php/")Observable<ResponseBody> getData(@Query String ip);@GETObservable<ResponseBody> executeGet( @Path String url, @QueryMap Map<String, String> maps);@POSTObservable<ResponseBody> executePost( @Path String url, @FieldMap Map<String, String> maps);@Multipart@POSTObservable<ResponseBody> upLoadFile( @Path String url, @Part("image\"; filename=\"image.jpg") RequestBody avatar);@POSTCall<ResponseBody> uploadFiles( @Url String url, @Part("filename") String description, @PartMap() Map<String, RequestBody> maps);}
  • 优化规划:出席基础API,收缩Api冗余
  • 强劲的缓存格局: 支持离线缓存, 无网络智能加载缓存,可安排是或不是须求缓存.
  • cookie管理:自带cookie管理机制.
  • 任何哀告形式:补助二种艺术访谈互连网(get, put, post ,delete).
  • 轻送调用:扶助表单,图像和文字一同,json上传。
  • 文件传输:帮忙文件下载和上传,并协助进度。
  • 动态增进:帮忙哀求头和参数统一加多,分别拉长。
  • 结果管理:帮忙对回到结果的合併管理。
  • 扩大性强:支持自定义的强大API,暗中认可Api不可能满意时可自定义自个儿的Service
  • 悠雅方便:扶助统一央求访谈网络的流水线调整,以有助于帮您到家加入Processbar进度。
  • 凯雷德xJava结合: 结合奥迪Q5xJava,线程智能调节.
  • 兼容retrofitAPI,兼容okhttp API
  • 强劲的泛型扶助,自动剖析种种格式复杂数据。

UpLoad

    RequestBody requestFile =
                    RequestBody.create(MediaType.parse("image/jpg"), new File(mPath));

    RetrofitClient.getInstance(MainActivity.this)
                   .createBaseApi()
                   .upload(url, requestFile)
                   .subscribe(new BaseSubscriber<T>(context) {
                    });

地方新扩充了多少个常用的伸手方法

依赖Gradle:

Download

  RetrofitClient.getInstance(MainActivity.this)
  .createBaseApi()
  .download(url1, new CallBack() {


            );

率先个只是常见写法的列子, url ,诉求头,参数都是写死的。 不建议如此做

其次,多个分别是Get 和POST央求,method Url, headers, body参数都能够动态外界传入。

四 五是单文件/图片和多文本/图片上传

  • root:

Execute you ApiService

用来设置基础header,这里是透过MAP键值对来创设,将heder插足到Request中。

定义MyApiService

public interface MyApiService {

    @GET("service/getIpInfo.php")
    Flowable<BaseResponse<IpResult>> getData(@Query("ip") String ip);
}
 /** * BaseInterceptor,use set okhttp call header * Created by Tamic on 2016-06-30.*/public class BaseInterceptor implements Interceptor{ private Map<String, String> headers; public BaseInterceptor(Map<String, String> headers) { this.headers = headers; } @Override public Response intercept(Chain chain) throws IOException { Request.Builder builder = chain.request() .newBuilder(); if (headers != null && headers.size { Set<String> keys = headers.keySet(); for (String headerKey : keys) { builder.addHeader(headerKey, headers.get(headerKey)).build(); } } return chain.proceed(builder.build; }}
 repositories { maven { url "https://jitpack.io" } jcenter() }

Create ApiService

            //create  you APiService
            MyApiService service = RetrofitClient.getInstance().create(MyApiService.class);

用来治本cookie, 储存cookie的store这里不再重复认证,具体列子请见:

  • app:

Call

            // execute and add observable
            RetrofitClient.getInstance(MainActivity.this)
                    .switchSchedulersMain(service.getData("21.22.11.33"))
                    .subscribe(new BaseSubscriber<BaseResponse<IpResult>>(MainActivity.this) {

                        });

<Retrofit 2.0 超能试行,完美同步Cookie完结免登陆>

More Rxjava

只要想操作EnclavexJAVA越多操作符:

RetrofitClient.getInstance(Context)
                      .createBaseApi()
                      .get("service/getIpInfo.php", maps)
                      .compose(new FlowableTransformer() {
                          @Override
                          public Publisher apply(@NonNull Flowable upstream) {
                              return null;
                          }
                      })
                      .map(new Function() {
                          @Override
                          public Object apply(@NonNull Object o) throws Exception {
                              return null;
                          }
                      })
                      .xxxxx()//更多
                      .subscribe(new BaseSubscriber<BaseResponse<IpResult>>() {

                          })
public class NovateCookieManger implements CookieJar {private static final String TAG = "NovateCookieManger";private static Context mContext;private static PersistentCookieStore cookieStore;/** * Mandatory constructor for the NovateCookieManger */public NovateCookieManger(Context context) { mContext = context; if (cookieStore == null) { cookieStore = new PersistentCookieStore; }}@Overridepublic void saveFromResponse(HttpUrl url, List<Cookie> cookies) { if (cookies != null && cookies.size { for (Cookie item : cookies) { cookieStore.add(url, item); } }}@Overridepublic List<Cookie> loadForRequest(HttpUrl url) { List<Cookie> cookies = cookieStore.get; return cookies;}}

本文由澳门皇冠金沙网站发布于编辑程序,转载请注明出处:完美结合RxJava,0和RxJava的又一次完美改进加强