本项目不依赖Retrofit和Rxjava,但参考了Retrofit源码,实现了Retrofit的声明式Api,以及Rxjava的链式调用线程自动切换, 功能涵盖请求缓存,请求加密,公共参数,自定义请求,自定义解析器等。具有以下特点:
- 简:方法封装极简,使用成本极低,链式调用一气呵成。
- 全:请求缓存,请求加密,公共参数,自定义请求,自定义解析器等,功能涵盖多数业务场景。
- 强:链式请求,Retrofit的声明式接口写法均支持。
- 轻:项目依赖少,剔除OKHttp与Gson,开发者可自行选择依赖。
从Bhttp 0.5开始完全剔除Okhttp与Gson的依赖,需要开发者自行依赖。
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
implementation 'com.github.huicunjun:BHttp:1.3'//BHttp核心依赖库
annotationProcessor 'com.github.huicunjun:bhttp-compiler:1.3'//Bhttp生成库 kotlin项目请使用kapt
implementation 'com.github.huicunjun:bhttp-annotation:0.4'//BHttp注解库
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.7.2'//必须
implementation 'com.google.code.gson:gson:2.8.6' //必须
BHttp.setDebug(true);//开启debug 打印网络请求日志
BHttp.init(okHttpClient);//可根据需要传入开发者的okHttpClient 非必须
//在您的域名常量使用注解方式声明
public class Url {
@DefaultDomain
public static String host = "https://gdptdad.com";
}
//在您的统一返回Response实体类添加@AsResponse注解
@AsResponse
public class Response<D> {
public int code;
public String msg;
public D data;
}
public interface ApiService {
@GET("test")
BHttp<Response<String>> test(@Query(value = "id",encoded = true) String id);
}
BHttp.create(ApiService.class)
.test("hello")
.to(this)//监听生命周期,页面销毁自动结束请求
.subscribe(stringResponse -> {
//请求完成回调,这里是主线程,直接UI操作
}, throwable -> {
//请求时出现错误回调,这里是主线程
});
BHttp.postJson("login")
.add("id","123")
.add("pass","666")
.to(this)//监听生命周期,页面销毁自动结束请求
.asResponse(Student.class)
.subscribe({
//请求完成回调,这里是主线程,直接UI操作
}, {
//请求时出现错误回调,这里是主线程
})
BHttp.create(ApiService::class.java)
.login("123","666")
.to(this) //监听生命周期,页面销毁自动结束请求
.subscribe(object : Observer<MySimpleResponse<String?>?> {
override fun onSubscribe() {
//请求前执行的逻辑,这里是主线程
}
override fun onNext(t: MySimpleResponse<String?>) {
//请求完成回调,这里是主线程,直接UI操作
}
override fun onError(e1: Throwable) {
//请求时出现错误回调,这里是主线程
}
override fun onComplete() {
//请求结束回调,这里是主线程(不管失败与否,最终都会执行改方法!)
}
})
参考Retrofit源码,相比于Retrofit,完全可以替代,更多的是Api写法上的超越。参考RXjava源码,相对于Rxjava,实现了基本的subscribe,线程切换,链式回调。
还未实现RxJava的流式操作,所以对于多条并行的请求,一个请求依赖另一个请求结果的,得回调地狱了!无线套娃。后期打算封装Kotlin协程可以解决此问题。
本项目一直是个人自用网络请求库。之前未尝试单独剥离出来。观摩了 RxHttp,RxHttpUtils ,EasyHttp 等前辈的源码,他们在实现上各有千秋,本人取其精华,有感而作。 能力有限,欢迎有更好的实现方式的一起交流探讨!
更多功能,请下载Demo体验