写这篇文章,纯粹只是分享Retrofit框架是如何实现的,同时此系列文章旨在分析Retrofit的一个实现思路。
Retrofit框架是什么呢?
对于java后端开发而言:就好像类似于操作数据库的Mapper接口这类操作。
而对于做android开发而言,就不用多说了。
本质上就是:接口+注解 = 实现http请求接口 的一个方式。
LQHttpRetrofit的实现效果:
先看NetService接口,网络请求定义的接口类
public interface NetService {
/**
* 获取用户信息 get请求
*/
@GET(value = "/getUsers?page={page}&pageSize={pageSize}")
Call<UserListInfo> queryUsers(@PathVariable("page")int page, @PathVariable("pageSize")int pageSize);
/**
* 获取所有用户信息 GET请求
*/
@GET(value = "/getUser")
Call<UserInfo> queryUser(@Header("username") String username);
/**
* 注册用户信息 post请求 不使用LQRetrofit默认配置的BaseUrl
*/
@POST(value = "/registerUser")
Call<CommentBean> registerUser(@Param("username")String username, @Param("password")String password,
@Param("sex")String sex, @Param("age")Integer age);
/**
* 测试
*/
@Headers({
"xxxx:aaa",
"yyyy:bbbbbxsdsdx"
})
@PUT("/updateUser")
Call<CommentBean> test(@Body String userInfo);
}
在看LQHttpRetrofit对NetService的使用
public class Main {
public static void main(String[] args) {
//创建LQRetrofit实例 同时装配OkHttp适配器OkHttpAdapter
LQRetrofit lqRetrofit = new LQRetrofit.Builder(new OkHttpAdapter())
.setBaseUrl("http://xx.xxx.xxx.xxx:8080/LqCsdnServer/lq-retrofit")
.build();
//代理NetService网络请求接口
NetService netService = lqRetrofit.create(NetService.class);
// 获取单个用户信息
netService
.queryUser("LQ")
.execute(new CallBack<UserInfo>() {
@Override
public void success(UserInfo userInfo) {
System.out.println("获取单个用户信息success");
System.out.println("success:" + userInfo.toString());
System.out.println("---------------------------------------------------");
}
@Override
public void fail(String e) {
System.out.println("获取单个用户信息:" + e);
}
});
//注册用户信息
netService
.registerUser("liuqiang", "123456", "M", 24)
.execute(new CallBack<CommentBean>() {
@Override
public void success(CommentBean commentBean) {
System.out.println("注册用户信息success");
System.out.println(commentBean.toString());
System.out.println("---------------------------------------------------");
}
@Override
public void fail(String e) {
System.out.println("注册用户信息:" + e);
}
});
//获取所有用户信息
netService.queryUsers(2, 8)
.execute(new CallBack<UserListInfo>() {
@Override
public void success(UserListInfo userListInfo) {
System.out.println("获取所有用户信息success");
List<UserInfo.DataBean> data = userListInfo.getData();
for (UserInfo.DataBean dataBean : data) {
System.out.println(dataBean.toString());
}
System.out.println("---------------------------------------------------");
}
@Override
public void fail(String e) {
System.out.println("获取所有用户信息:" + e);
}
});
}
}
最终运行结果:
注册用户信息success
CommentBean{status=240, message='password:length must be between 8 and 16;', data=null}
---------------------------------------------------
获取单个用户信息success
success:UserInfo{status=200, data=DataBean{username='LQ', age=24, sex='男'}, message='操作成功'}
---------------------------------------------------
获取所有用户信息success
DataBean{username='Alice9', age=19, sex='女'}
DataBean{username='LQ10', age=20, sex='男'}
DataBean{username='Alice11', age=21, sex='女'}
DataBean{username='LQ12', age=22, sex='男'}
DataBean{username='Alice13', age=23, sex='女'}
DataBean{username='LQ14', age=24, sex='男'}
DataBean{username='Alice15', age=25, sex='女'}
DataBean{username='LQ16', age=26, sex='男'}
---------------------------------------------------
LQHttpRetrofit简介
LQHttpRetrofit与Retrofit是很类似的,只是LQHttpRetrofit主要是一个以 注解+接口 = http网络请求 方式的一个手段或实现。真正的Http请求操作还是会交给开发者自己去实现或自己去集成第三方Http网络请求框架。
那么下篇开始就是对LQHttpRetrofit实现的代码分析,同时也对自己去看Retrofit实现的一个分析有所帮助。