0.设计模式
有很好的拓展性,可以跟RxJava、Json、OkHttp等主流库进行无缝对接。
- 动态代理: 解析GitHubService 接口中的请求方法,将注解拼装成完整的url。
- Builder模式:Retrofit对象的构建.
1.基本介绍
Retrofit 是一个OkHttp网络请求框架的封装,它不是一个网络框架。
它的内核目前默认是OkHttp实现的。
专注于接口的封装工作; OkHttp专注于网络的高效率请求。分工合作,更提高效率。
【Application Layer】
    ↓   ↑
【Retrofit Layer】封装请求参数、头部、url等。
    ↓   ↑
【OkHttp Layer】
    ↓   ↑
【Server服务器】
总结:
1.App应用程序通过 Retrofit 请求网络,实际上是使用Retrofit 接口层封装请求参数(header,url信息),
之后由OkHttp完成后续的请求操作.
2.在服务器返回数据之后,OkHttp 将原始的结果还给Retrofit,Retrofit 根据用户的需求对结果进行解析。
完成各种数据的转换,和适配工作。
2. 常用注解的区别。
| 注解 | 用途 | 示例 | 
|---|---|---|
| @Path | URL 路径动态部分 | users/{id} | 
| @Query | URL 查询参数 | ?name=value | 
| @QueryMap | 多个查询参数 | ?k1=v1&k2=v2 | 
| @Body | 请求体 | POST/PUT 的 JSON 数据 | 
3.Retrofit框架网络请求的7个步骤:
3.1 app.build.gradle添加Retrofit库的依赖,网络权限。
    implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.retrofit2:converter-scalars:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
3.2 添加返回的Bean
public class Repo {}
3.3 添加接口interface,里面的请求使用注解 标识。
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface GitHubService {
    //subUrl
    @GET("users/{user}/repos") //{}是动态变化的,是下面user传进来的
    Call<List<Repo>> listRepos(@Path("user") String user);//当user对象未设置值,默认使用'user'
}
@GET 这里使用的注解,内部机制,通过动态代理模式,将接口的注解翻译成一个Http请求,最后再执行http请求。
3.4 创建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com/") //baseUrl
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //支持RxJava
                .addConverterFactory(GsonConverterFactory.create()) //将返回的httpResponse 转换为Java对象
                .build();
// 完整url =BaseUrl +subUrl。
3.5 创建网络请求的接口实例
    GitHubService service = retrofit.create(GitHubService.class);
    Call repos = (Call) service.listRepos("XXXX"); //构建okHttp的Call对象。
3.6 进行同步或异步请求;3.7处理成功和失败的回调。
  repos.enqueue(new Callback() { //3.6开始异步请求
    @Override
    public void onFailure(Call call, IOException e) {
        System.out.println("请求失败,onFailure");
    }
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        // 3.7 处理成功和失败的回调。
        System.out.println("请求成功:" + response.body());
    }
  });
总结:
- 添加Retrofit库的依赖,添加网络权限;
- 创建 接受服务器返回数据的bean类;
- 创建 用于描述网络请求 的Java接口(注解 描述/配置网络请求参数、);
 内部原理:动态代理,将接口的注解翻译成一个个http请求,最后由线程池执行http请求。
- 创建 Retrofit 实例;
- 创建 网络请求接口实例
- 发送网络请求(同步/异步)
- 处理服务器返回的数据。
--------End-------------------