|
|
package com.monke.monkeybook.base;
|
|
|
import com.monke.basemvplib.EncodoConverter;
|
|
|
import com.monke.basemvplib.impl.RetryIntercepter;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import okhttp3.OkHttpClient;
|
|
|
import retrofit2.Retrofit;
|
|
|
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
|
|
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
|
|
|
|
|
public class MBaseModelImpl {
|
|
|
|
|
|
// 定义一个受保护的 OkHttpClient.Builder 类型的变量 clientBuilder,
|
|
|
// 通过创建 OkHttpClient.Builder 的实例来构建一个 OkHttpClient 的配置构建器,
|
|
|
// 后续可以基于这个构建器来添加各种配置项,例如设置超时时间和添加拦截器等
|
|
|
protected OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
|
|
|
// 设置连接超时时间为 10 秒,即客户端尝试连接服务器的最长等待时间,超过这个时间若还未成功连接则认为连接超时
|
|
|
.connectTimeout(10, TimeUnit.SECONDS)
|
|
|
// 设置写超时时间为 10 秒,指客户端向服务器写入数据的最长时间限制,防止出现长时间写入无响应的情况
|
|
|
.writeTimeout(10, TimeUnit.SECONDS)
|
|
|
// 设置读超时时间为 10 秒,意味着客户端从服务器读取数据的最长允许时间,避免长时间等待读取数据导致阻塞等问题
|
|
|
.readTimeout(10, TimeUnit.SECONDS)
|
|
|
// 添加一个名为 ProxyInterceptor 的拦截器,这个拦截器可能用于对网络请求进行一些自定义的拦截处理,
|
|
|
// 比如添加请求头、修改请求参数、对请求进行代理转发等操作,但具体功能取决于 ProxyInterceptor 类的实现逻辑
|
|
|
.addInterceptor(new ProxyInterceptor());
|
|
|
|
|
|
// 定义一个受保护的方法 getRetrofitObject,用于构建并返回一个 Retrofit 实例,
|
|
|
// 这个方法接收一个表示网络请求基础 URL 的字符串参数,用于配置 Retrofit 实例与哪个服务器地址进行通信
|
|
|
protected Retrofit getRetrofitObject(String url) {
|
|
|
// 通过 Retrofit.Builder 创建一个 Retrofit 的构建器实例,开始构建 Retrofit 对象,
|
|
|
// 构建过程中通过链式调用各种方法来添加不同的配置项
|
|
|
return new Retrofit.Builder().baseUrl(url)
|
|
|
// 添加 ScalarsConverterFactory,使得 Retrofit 支持网络请求直接返回原始字符串类型的数据,
|
|
|
// 方便处理一些简单的文本数据返回的网络请求场景,不需要额外的复杂数据解析步骤
|
|
|
.addConverterFactory(ScalarsConverterFactory.create())
|
|
|
// 添加 RxJava2CallAdapterFactory,让 Retrofit 能够将网络请求的返回结果转换为 RxJava 的 Observable 类型,
|
|
|
// 便于后续利用 RxJava 的响应式编程特性(如链式操作、异步处理、错误处理等)来处理网络请求的结果
|
|
|
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
|
|
// 将之前配置好的 OkHttpClient 实例(通过 clientBuilder 构建完成)设置到 Retrofit 中,
|
|
|
// 这样 Retrofit 在发起网络请求时就会使用这个配置好的客户端来进行实际的 HTTP 操作
|
|
|
.client(clientBuilder.build())
|
|
|
// 最后通过 build 方法完成 Retrofit 对象的构建并返回,得到一个可用于发起具体网络请求的 Retrofit 实例
|
|
|
.build();
|
|
|
}
|
|
|
|
|
|
protected Retrofit getRetrofitString(String url, String encode) {
|
|
|
// 与 getRetrofitObject 方法类似,通过 Retrofit.Builder 开始构建 Retrofit 对象,先指定基础 URL
|
|
|
return new Retrofit.Builder().baseUrl(url)
|
|
|
// 添加 EncodoConverter,通过传入指定的编码格式 encode,使得 Retrofit 在处理返回值为字符串的网络请求时,
|
|
|
// 可以按照这个编码格式进行数据的转换或解析等操作,确保返回的字符串数据符合预期的编码要求
|
|
|
.addConverterFactory(EncodoConverter.create(encode))
|
|
|
// 同样添加 RxJava2CallAdapterFactory,使 Retrofit 支持将返回结果转换为 RxJava 的 Observable 类型,便于后续进行响应式编程处理
|
|
|
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
|
|
// 将配置好的 OkHttpClient 实例设置到 Retrofit 中,为网络请求提供实际的客户端支持
|
|
|
.client(clientBuilder.build())
|
|
|
// 完成 Retrofit 对象的构建并返回,得到一个适合处理特定编码格式字符串返回值的网络请求的 Retrofit 实例
|
|
|
.build();
|
|
|
}
|
|
|
} |