-
-
Notifications
You must be signed in to change notification settings - Fork 458
RxHttp 3.0 更新指南,升级必看
liujingxing edited this page Jun 19, 2023
·
4 revisions
在3.0版本之前,默认支持自签名的https,配置如下:
//Default OkHttpClient object in RxHttp
private static OkHttpClient getDefaultOkHttpClient() {
SSLParams sslParams = HttpsUtils.getSslSocketFactory();
return new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
.hostnameVerifier((hostname, session) -> true)
.build();
}
3.0版本则取消对自签名https的默认支持,更改后的如下:
//Default OkHttpClient object in RxHttp
private static OkHttpClient getDefaultOkHttpClient() {
return new OkHttpClient.Builder().build(); //okhttp内部读、写、连接超时均为10s
}
所以,如果你之前没有自定义OkHttpClient
对象,且需要支持没有证书的https网站,则需要自定义OkHttpClient
对象,如下:
//建议在Application中调用
public static void init() {
SSLParams sslParams = HttpsUtils.getSslSocketFactory();
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) //添加信任证书
.hostnameVerifier((hostname, session) -> true) //忽略host验证
.build();
RxHttpPlugins.init(client) //自定义OkHttpClient对象
.setDebug(BuildConfig.DEBUG, false, 2) //调试模式/分段打印/json数据格式化输出
.setOnParamAssembly(p -> { //设置公共参数,非必须
});
}
目前由之前的rxhttp.wrapper.cahce
改为rxhttp.wrapper.cache
,如有用到,重新导入即可
-
RxJava环境的
asXxx
方法改为了toObserableXxx
-
Await环境的
toXxx
系列方法改为toAwaitXxx
方法 -
Flow环境仅更改了下载系列方法,由
toFlow
改为toDownloadFlow
以上详细更改,请查看3.0 toObserableXxx/toAwait/toFlowxxx方法介绍
public static void init() {
RxHttpPlugins.init(client)
.setDebug(BuildConfig.DEBUG, false, 2)
.setOnParamAssembly(p -> {
// return p; 3.0版本前,需要写return语句,3.0版本则不需要
});
}
//3.0之前
RxHttp.postForm("/service/...")
.addFile("file", File("sd卡路径"))
.upload(AndroidSchedulers.mainThread()) {
//上传进度回调,主线程
}
.asClass<User>()
.subscribe({
//成功回调
}, {
//异常回调
})
//3.0
RxHttp.postForm("/service/...")
.addFile("file", File("sd卡路径"))
.toObservable<User>()
.onMainProgress { //当然也可以调用onProgress指定回调线程
//上传进度回调,主线程
}
.subscribe({
//成功回调
}, {
//异常回调
})
对于Await/Flow
下载,仅仅是更改了方法名,由3.0前的toDownload/toFlow
改为了toDownloadAwait/toDownloadFlow
;
而RxJava
,不仅更改了方法名,还调整了下载进度监听方式,跟监听上传进度一样,如下:
//3.0之前
RxHttp.get("/service/.../xxx.apk")
.asDownload("sd卡路径", AndroidSchedulers.mainThread()) { //断点下载调用asAppendDownload方法
//下载进度回调,主线程
}
.subscribe({
//成功回调,这里返回sd卡存储路径
}, {
//异常回调
})
//3.0
RxHttp.get("/service/.../xxx.apk")
.toDownloadObservable("sd卡路径", Boolean) //断点下载第二个参数传true
.onMainProgress { //当然也可以调用onProgress指定回调线程
//下载进度回调,主线程
}
.subscribe({
//成功回调,这里返回sd卡存储路径
}, {
//异常回调
})
//3.0之前
RxHttp.get("/service/...")
.setSync()
.asClass<User>()
.subscribe()
//3.0
RxHttp.get("/service/...")
.toObservable<User>()
.syncRequest() //syncRequest替代setSync,并且需要在toObservableXxx方法后调用
.subscribe()
-
删除RxJava下的
asBitmap/asHeaders()/asOkResponse
方法 -
删除Await下的
toBitmap/toHeaders()/toOkResponse
方法 -
删除Flow下的
toFlowBitmap/toFlowHeaders()/toFlowOkResponse
方法
//3.0获取Bitmap
RxHttp.get("/server/...")
.toObservable<Bitmap>() //RxJava
//.toAwait<Bitmap>() //Await
//.toFlow<Bitmap>() //Flow
//3.0获取Headers/OkHttp3.Response
RxHttp.get("/server/...")
.toObservable<OkResponse<User>>() //Await/Flow 调用 toAwait/toFlow
.subscribe({
val headers = it.headers() //Headers
val response = it.raw() //OkHttp3.Response
val user = it.body()
}, {
//异常回调
})