一、亮点介绍:
自从鸿蒙手机版发布以来,我就一直在做移植的工作,将安卓代码移植到鸿蒙系统上。Retrofit是安卓系统上一款优秀的网络请求框架,鸿蒙系统并没有类似的网络请求框架。于是,我决定实现一套鸿蒙版的Retrofit。
蒹葭(JianJia)是一款鸿蒙系统上的网络请求框架,其实就是将安卓的Retrofit移植到鸿蒙系统上,我将鸿蒙版的Retrofit命名为蒹葭(JianJia)。蒹葭不仅能实现Retrofit的功能,还会提供一些Retrofit没有的功能。Retrofit不支持动态替换域名,国内的应用一般都是有多个域名的,蒹葭支持动态替换域名。Retrofit并不能够直接添加拦截器,只能通过okhttp来添加拦截器,蒹葭会支持添加拦截器。
二、Demo编译及效果呈现如下:
注:文档附件在最下面
三、源码:
https://gitee.com/zhongte/JianJia
要想读懂源码,需要具备以下技能。
熟悉okhttp的常见用法
熟悉面向接口编程、反射、泛型、注解
熟悉构造者模式、适配器模式、工厂模式、策略模式、静态代理、动态代理、责任链模式等设计模式
四、用法,用法跟Retrofit一样
蒹葭提供了一系列的注解,在进行网络请求的时候,就需要用到这些注解。
4.1 GET注解
创建接口,在方法里面使用GET注解,GET注解用于标识这是一个GET请求,方法的返回值是Call对象,泛型是ResponseBody,其实泛型也可以是具体的实体对象,这个后面再说。蒹葭如何完成网络请求?使用构造者模式创建jianjia对象,baseUrl就是域名,在创建jianjia对象的时候就必须指定域名。调用create方法来生成接口的实例,调用wan.getBanner().enqueue来执行网络请求,请求成功就会回调onResponse方法,请求失败就会回调onFailure方法
public interface Wan {
@GET("banner/json")
Call<ResponseBody> getBanner();
}
JianJia jianJia = new JianJia.Builder()
.baseUrl("https://www.wanandroid.com")
.build();
Wan wan = jianJia.create(Wan.class);
wan.getBanner().enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
String json = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
LogUtils.info("yunfei"