- 其思想,类似于ListView、RecycleView的适配器(负责把布局和数据进行整合,然后渲染出来)
- 创建一个Client交给它,它会帮我们去调用请求网络;默认使用OkHttpClient;
官方文档简阅
- Retrofit会自动把
返回数据
转换成Call<List<Repo>>
中<List<Repo>>
位置类型的值;例如:
@GET("user/{id}")
Call<User> getUserInfoWithPath(@Path("id") int user_id);
<List<Repo>>
对应的位置类型就是User
,
所以上面这个Call
方法 返回的就是一个User
类型的实例
;
所以省去了我们用Gson
解析的步骤:
private Api api;
---
User user = api.getUserInfoWithPath(1).execute().body();
Call<List<Repo>>
随后的listRepos
是方法名,
由开发者自定义,如以上实例代码中的getUserInfoWithPath()
;
- 再往后是
@Path("user")
,
这部分同注解("users/{user}/repos")
中的{user}
相对应,
指定的是通过什么字段去服务端Get
;
如示例代码中@GET("user/{id}")
中的{id}
就和@Path("id")
相对应,
指定了方法getUserInfoWithPath()
是通过id
字段去服务端获取(GET)数据
的,
例如User user = api.getUserInfoWithPath(1).execute().body();
,
聚焦getUserInfoWithPath(1)
;
就是到服务端查询到id
字段是1
的User
类数据,
查到之后就返回到客户端,
转化成一个id
字段为1
的User
类实例;
(也就是通过id
字段去Get
数据)
- 再往后就是指定
@Path("user")
中"user"
的数据类型
了,
如以上String user
、int user_id
;
- **定义完以上接口之后,
创建一个Retrofit
类实例,
通过这个Retrofit
实例创建一个方才定义的接口的代理实例
,接口的代理实例
编写语句类似于普通class
的声明,
但是它事实上并不同于class
声明那样子声明出一个实在的对象
,
而仅仅是一个接口代理对象(如下图的service)
而已,
不是一个实实在在的接口对象
;
(我们知道接口一般是没有实例对象的)**
- 接着通过方才创建出来的
接口代理实例
去调用Call<List<Repo>>
随后的由开发者自定义的请求方法listRepos
方法,
如以上实例代码中的getUserInfoWithPath()
;
即可:
然后返回结果;
以上可以归结为三个步骤,示例代码如下:
//1. 定义对应 HTTP API的 Java接口
public interface Api {
@GET("user/{id}")
Call<User> getUserInfoWithPath(@Path("id") int user_id);
}
---
private Api api;
---
//2. 创建 Retrofit实例,通过该实例创建接口代理实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.1.189:5000/")
.addConverterFactory(GsonConverterFactory.create())
.build();
api = retrofit.create(Api.class);
---
//3. 通过接口代理实例调用自定义的请求方法,得到返回结果
User user = api.getUserInfoWithPath(1).execute().body();
其他API文档
- 关于请求方法:
- manipulation 操作,操控;
- 把一个
User实例
转换成json形式
进行提交(Post)
: 表单(form)形式
提交:- 多种类型数据提交:
- 添加请求头部:
- **
Retrofit
默认将HTTP
的bodies
转化成OkHttp
的ResponseBody
,
另外我们可以给Retrofit
配置数据默认的转换框架
,
例如Gson
(从这点看,Retrofit
像适配器
):**
参考自 菜鸟窝