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> postArticleList(@Body RequestBody body);

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

 

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> workerCall = apiUrl.postArticleList(body);
//请求网络获取数据
workerCall.enqueue(new Callback>() {
    @Override
    public void onResponse(Call> call, Response> response) {
    }

    @Override
    public void onFailure(Call> 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> postArticle(@Body RequestBody body);

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

RxJava的 Observable 对象。

 

参考:

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

 

 

 

你可能感兴趣的:(andoid基础)