方式一:
/**
* Retrofit的工具类
* <p>
* 1.get
* 2.post
* 3.配置拦截器
* 4.上传图片
*/
public class RetrofitUtil {
private static RetrofitUtil retrofitUtil;
private final Retrofit retrofit;
private static final String TAG = "RetrofitUtil===";
//单利模式
public static RetrofitUtil getInstance() {
if (retrofitUtil == null) {
retrofitUtil = new RetrofitUtil();
}
Log.d(TAG, "---" + retrofitUtil);
return retrofitUtil;
}
//因为Retrofit需要初始化,所以在构造方法里面我们可以将Retrofit初始化
public RetrofitUtil() {
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
Retrofit.Builder builder = new Retrofit.Builder();
retrofit = builder.baseUrl(HttpConfig.base_url)
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.client(client)//指定配置好okhttp客户端
.build();
Log.d(TAG, "初始化完毕---" + retrofit);
}
//通过反射创建子类
public <T> T createReq(Class<T> clz) {
T t = retrofit.create(clz);
Log.d(TAG, "创建服务子类------");
return t;
}
//拦截器
class MyIntercepter implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
RequestBody body = request.body();
if (body instanceof FormBody) {
FormBody.Builder newBuilder = new FormBody.Builder();
for (int i = 0; i < ((FormBody) body).size(); i++) {
String key = ((FormBody) body).name(i);
String value = ((FormBody) body).value(i);
newBuilder.add(key, value);
}
newBuilder.add("source", "android");
FormBody body1 = newBuilder.build();
Request request1 = request.newBuilder().post(body1).build();
Response response = chain.proceed(request1);
return response;
}
return null;
}
}
}
方式二:(无拦截器)
/**
* 网络请求工具类
* <p>
* 1.单利
* 2.get/post 拦截器
*/
public class RetrofitUtils {
//单利
private static RetrofitUtils retrofitUtils = null;
private final Retrofit retrofit;
public static RetrofitUtils getRetrofitUtils() {
if (retrofitUtils == null) {
retrofitUtils = new RetrofitUtils();
}
return retrofitUtils;
}
//初始化
public RetrofitUtils() {
//建造者模式,
//和RxJava集合使用的时候需要配置的
//直接将json---JavaBean
retrofit = new Retrofit.Builder()//建造者模式,
.baseUrl(HttpConfig.BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//和RxJava集合使用的时候需要配置的
.addConverterFactory(GsonConverterFactory.create(new Gson()))//直接将json---JavaBean
.build();
}
//通过反射创建服务的实例对象
//T 代表泛型里面的type
//why 通过反射生成接口的子类对象,方便调用方法
public <T> T createRequest(Class<T> clz) {
T t = retrofit.create(clz);
return t;
}
}