引言
Retrofit是Square公司开发的一款针对Android网络请求的框架,遵循Restful设计风格,我们查看 invoke 可以发现:底层基于OkHttp实现的 ,相比其他网络请求框架,有以下优势:
- 性能最好,速度最快(动态代理优势)
- 简洁易用,代码简化
- 解耦彻底,职责细分
- 易与其他框架联用(Rxjava)
当然也有弊端:因为高度封装,相对于 OkHttp ,扩展性变差了,不过整体能满足项目需求.今天我就带大家来看一下Retrofit究竟是如何使用,以及内部工作原理
一.概述
作用
OKHttp 做的更加简洁,更加方便,同时影藏了oKHttp的某些功能。
type-safe
retrofit是基于okhttp的,因此retrofit所有的工作都是围绕在请求体和响应体来展开的,Retrofit提供了各种类型的转换器以及可以自定义转换器,去构建你的请求体,以及通过转换器去序列化响应体为你想要的类型,从而保证你的请求体和响应体都是安全的
二.使用
1. 添加 retrofit 依赖
implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
2. 添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3. 创建实体类
访问 小木箱 github 仓库,通过get请求得到了以下报文:
然后,通过 Gsonformat 得到相关实体类对象:
class MicroKibacoRepo { private int id; private String node_id; private String name; private String full_name; // ---为了避免浪费篇幅,省略无用代码--- }
4. 创建⼀一个 interface 作为 Web Service 的请求集合,在⾥里⾯⽤注解(Annotation)写⼊需要配置的请求方法
public interface GitHubService { @GET("users/{user}/repos") Call<List<MicroKibacoRepo>> listRepos(@Path("user") String user); }
5. 在正式代码里⽤ Retrofit 创建出 interface 的实例
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); GitHubService service = retrofit.create(GitHubService.class);
6. 调⽤创建出的 Service 实例的对应⽅法,创建出相应的可以⽤来发起网络请求的 Call 对象
Call<List<MicroKibacoRepo>> repos = service.listRepos("MicroKibaco");
7. 使用 Call.execute() 或者 Call.enqueue() 来发起请求
repos.enqueue(new Callback<List<MicroKibacoRepo>>() { @Override public void onResponse(Call<List<MicroKibacoRepo>> call, Response<List<MicroKibacoRepo>> response) { } @Override public void onFailure(Call<List<MicroKibacoRepo>> call, Throwable t) { } });
三. Retrofit常用API