仿Retrofit框架的实现--LQHttpRetrofit(一)

写这篇文章,纯粹只是分享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实现的一个分析有所帮助。

猜你喜欢

转载自blog.csdn.net/qq_33429583/article/details/84839998