Android Retrofit框架分析

Retrofit 是一个Android网络框架,是squareup 公司出品, 内部是基于OkHttp 去实现网络请求,Retrofit 与 OkHttp的关系是,Retrofit 负责网络调度,Okhttp 负责网络执行。 下面介绍下Retrofit

1) Retrofit 基本使用

1. 引入 Retrofit 相关库

implementation 'com.squareup.retrofit2:retrofit:2.5.0'   //retrofit网络请求框架
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'  //retrofit添加Json 支持
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'   //retrofit添加Rxjava支持

2. 定义接口:

@Headers("Accept:application/json")
@POST("article/list")
Call<BaseResponse<ArticlesData>> postArticleList(@Body RequestBody body);

使用注解@POST("article/list") 声明了url 路径, 用注解@Body 声明了请求参数, 使用Call<BaseResponse<ArticleData>> 声明返回值是一个Retrofit 的Call 对象,数据类型是BaseResponse<ArticleData>.

 

3. 初始化Retrofit,获取Retrofit 对象, 接口实例对象, 网络工作对象:

//新建Retrofit 对象,okHttpClient对象作为参数
new Retrofit.Builder()
        .client(client)
        .baseUrl(Constans.BaseUrl)
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create())
        .build();
//创建接口实例对象
ApiUrl apiUrl = retrofitClient.create(ApiUrl.class); 
//创建网络工作对象
Call<BaseResponse<ArticlesData>> workerCall = apiUrl.postArticleList(body);
//请求网络获取数据
workerCall.enqueue(new Callback<BaseResponse<ArticlesData>>() {
    @Override
    public void onResponse(Call<BaseResponse<ArticlesData>> call, Response<BaseResponse<ArticlesData>> response) {
    }

    @Override
    public void onFailure(Call<BaseResponse<ArticlesData>> call, Throwable t) {
    }
});

2) Retrofit 主要工作

Retrofit 不直接做网络请求,Retrofit 负责网络调度,做些配套工作,包括创建发起请求Call对象, 接受数据的CallBack 对象,做数据转换Converter对象,等工作。 Retrofit 在底层统一 调用OkHttp 去做网络处理。

Retrofit 的好处是,可以根据定义的接口,灵活的生成对象的网络工作对象,然后使用这个对象访问网络。

3)功能扩展

Retrofit 的扩展,可以从三个方面扩展:

1. OkHttpClient :

Retrofit 底层统一使用OkHttp 去请求网络, Okhttp 不能替换为别的网络框架, 但是扩展OkHttpClient, 最常见的扩展是定义Interceptor拦截器。

//在初始化OkHttpClient时,添加自定义拦截器

new OkHttpClient().newBuilder()
        .readTimeout(Constans.DEFAULT_TIME, TimeUnit.SECONDS)//设置读取超时时间
        .connectTimeout(Constans.DEFAULT_TIME, TimeUnit.SECONDS)//设置请求超时时间
        .writeTimeout(Constans.DEFAULT_TIME,TimeUnit.SECONDS)//设置写入超时时间
        .addInterceptor(new LogInterceptor())//添加打印拦截器
        .retryOnConnectionFailure(true)//设置出现错误进行重新连接。
        .build();

2. addConverterFactory():

.addConverterFactory(GsonConverterFactory.create())

将网络请求返回数据转换为另一种数据对象,这里是转换为json 数据对象。

3.  addCallAdapterFactory

addCallAdapterFactory(RxJava2CallAdapterFactory.create())
Observable<BaseResponse<ArticlesData>> postArticle(@Body RequestBody body);

将Retrofit 执行网络请求的Call对象转换为接口中定义的Call对象, 这里是将Retrofit 的Call对象转换为接口中定义的

RxJava的 Observable<T> 对象。

 

参考:

https://www.jianshu.com/p/f57b7cdb1c99

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值