RetrofitUtils 网络请求工具类的封装

方式一:

/**
 * 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;
    }
}

猜你喜欢

转载自blog.csdn.net/chen_md/article/details/81251639
今日推荐