Skip to content

RxHttp 3.0 更新指南,升级必看

liujingxing edited this page Jun 19, 2023 · 4 revisions

1、默认OkHttpClient更改

在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 -> {                 //设置公共参数,非必须                        
                                                                                       
        });                                                                            
}                                                                                      

2、缓存功能相关类目录更改

目前由之前的rxhttp.wrapper.cahce改为rxhttp.wrapper.cache,如有用到,重新导入即可

3、asXxx/toXxx/toFlowXxx方法更改

  • RxJava环境的asXxx方法改为了toObserableXxx

  • Await环境的toXxx系列方法改为toAwaitXxx方法

  • Flow环境仅更改了下载系列方法,由toFlow改为toDownloadFlow

以上详细更改,请查看3.0 toObserableXxx/toAwait/toFlowxxx方法介绍

4、setOnParamAssembly公共参数回调更改

public static void init() {                                                                                                                               
    RxHttpPlugins.init(client)                     
        .setDebug(BuildConfig.DEBUG, false, 2)     
        .setOnParamAssembly(p -> {               
            // return p;  3.0版本前,需要写return语句,3.0版本则不需要                        
                                                                                       
        });                                                                            
} 

5、RxJava上传进度监听方式更改

//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({                
        //成功回调
    }, {                
        //异常回调                   
    })

6、RxJava/Await/Flow下载方法更改

对于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卡存储路径                      
    }, {                
        //异常回调                   
    })

7、RxJava同步请求方法setSync更改

//3.0之前
RxHttp.get("/service/...")
    .setSync()
    .asClass<User>()
    .subscribe()

//3.0
RxHttp.get("/service/...")
    .toObservable<User>()
    .syncRequest()  //syncRequest替代setSync,并且需要在toObservableXxx方法后调用
    .subscribe()

8、获取Bitmap/Headers/OkHttp3.Response对象方式更改

  • 删除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()
    }, {                
        //异常回调                   
    })
Clone this wiki locally