网络请求组件,基于Okhttp3+Retrofit2+Rxjava2封装。
引入
implementation 'com.casstime.ec:net:0.1.0'
初始化
val config = CTNetworkConfigInitHelper.initWithApplication(application, baseUrl, isProduction)
.apply {
cacheStateSec = (5 * 1024 * 1024).toLong() //缓存大小
eadTimeOut = 5* 1000 //读取超时(毫秒)
connectTimeOut = 5* 1000 //连接超时时间(毫秒)
interceptors = arrayOf(HttpLoggingInterceptor(), //拦截器
CallServerInterceptor(true))
}
CTOkHttpClient.init(config)
CTNetworkConfigInitHelper.Config config =
CTNetworkConfigInitHelper.INSTANCE.initWithApplication(application, baseUrl, isProduction);
config.setCacheStateSec((8 * 1024 * 1024));//缓存大小
config.setConnectTimeOut(8 * 1000);//连接超时时间(毫秒)
config.setReadTimeOut(8 * 1000); //读取超时(毫秒)
config.setInterceptors (new Interceptor[]{ //拦截器
new CECCommonInterceptor(),
new OauthInterceptor(),
});
CTOkHttpClient.Companion.init(config);
Retrofit的工厂方法类,用于构建Retrofit对象,Retrofit的用法请参考Retrofit官网
!!! example 这里举一个简单的例子
//定义请求接口
interface GitHubService {
@GET("users/{user}/repos")
fun listRepos(@Path("user") user: String): Observable<List<Repo>>
}
//构建Retrofit对象
var retrofit: Retrofit = CTRetrofitFactory.instance
//构建Retrofit服务
var service = retrofit.create(GitHubService::class.java)
//发起请求
var repos = service.listRepos("octocat")
//定义请求接口
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
//构建Retrofit对象
Retrofit retrofit = CTRetrofitFactory.Companion.getInstance();
//构建Retrofit服务
GitHubService service = retrofit.create(GitHubService.class);
//发起请求
Observable<List<Repo>> repos = service.listRepos("octocat");
无网络状态下抛出的异常,可以在io.reactivex.Observer.onError(Throwable e)
中获取到。
@Override
public void onError(Throwable e) {
// 处理错误信息
if (e instanceof CTNoNetworkException) {
String noNetworkMessage = "网络不可用,请检查网络设置";
Log.e("TAG",noNetworkMessage);
}
}
主要用于网络请求线程调度,请求过程在IO线程,在主线程处理请求回调。
CTRetrofitFactory.instance
.create(GitHubService::class.java)
.listRepos("octocat")
.compose(CTHttpTransformer())//添加线程调度
.subscribe()
CTRetrofitFactory.Companion.getInstance()
.create(GitHubService.class)
.listRepos("octocat")
.compose(new CTHttpTransformer<List<String>>())//添加线程调度
.subscribe();
OkHttpClient的单例实现,Java中CTOkHttpClient.Component.getInstance();
或Kotlin中CTOkHttpClient.instance
获取实例
!!! tip
1. 默认情况下,添加了打印日志的拦截器,在生产模式下关闭日志
2. 默认情况下,使用CTCookieJarManager
管理Cookie
3. 默认情况下,设置了20秒连接超时,20秒读取超时,10M缓存大小;
CookieJar管理类,负责CookieJar的创建和清除,该类依赖于https://github.com/franmontiel/PersistentCookieJar
//获取CookieJar实例
val cookieJar = CTCookieJarManager.cookieJar
//清除cookie
CTCookieJarManager.clear()
//获取CookieJar实例
PersistentCookieJar cookieJar = CTCookieJarManager.Companion.getCookieJar();
//清除cookie
CTCookieJarManager.Companion.clear();
可以通过以下方式快速构建区别于全局配置的新实例
CTOkHttpClient.Companion.newInstance((config: CTNetworkConfigInitHelper.Config))
CTRetrofitFactory.Companion.newInstance(baseUrl: String, okHttpClient: OkHttpClient)