Retrofit(待完善

109 阅读1分钟

Retrofit入门使用

首先了解一下为什么要使用Retrofit

Retrofit是对OKHttp的一层封装,本质上网络请求还是OKHttp

OkHttp不同的请求对应的请求地址不同,即request不同,而且配置请求body,请求头,请求参数也很繁琐,每次请求的时候都需要重新一段request代码

OkHttp只是负责网络请求,返回一个Response,不负责数据的解析,所以用户拿到返回数据后,对responsebody需要自己手动解析,无法进行复用 如果用户需要通过上一步的请求结果来进行下一步的请求,会出现回调陷阱

那么如何使用呢?

  1. 创建NetWorkModule类来对外提供okhttp实例以及retrofit实例
public class NetWorkModule {
    /**
     * 提供OkHttpClient
     */
    public static OkHttpClient provideOkHttpClient() {
        //初始化okhttp
        OkHttpClient.Builder okhttpClientBuilder = new OkHttpClient.Builder();

        //配置缓存
        Cache cache = new Cache(AppContext.getInstance().getCacheDir(), Config.NETWORK_CACHE_SIZE);
        okhttpClientBuilder.cache(cache);

        okhttpClientBuilder.connectTimeout(60, TimeUnit.SECONDS) //连接超时时间
                .writeTimeout(60, TimeUnit.SECONDS) //写,也就是将数据发送到服务端超时时间
                .readTimeout(60, TimeUnit.SECONDS); //读,将服务端的数据下载到本地

        if (Config.DEBUG) {
            //调试模式

            //创建okhttp日志拦截器
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();

            //设置日志等级
            loggingInterceptor.level(HttpLoggingInterceptor.Level.BASIC);

            //添加到网络框架中
            okhttpClientBuilder.addInterceptor(loggingInterceptor);
        }

        return okhttpClientBuilder.build();
    }
    /**
     * 提供Retrofit实例
     *
     * @param okHttpClient
     * @return
     */
    public static Retrofit provideRetrofit(OkHttpClient okHttpClient) {
        return new Retrofit.Builder()
                //让retrofit使用okhttp
                .client(okHttpClient)

                //api地址
                .baseUrl(Config.ENDPOINT)

                //适配rxjava
                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())

                //使用gson解析json
                //包括请求参数和响应
                .addConverterFactory(GsonConverterFactory.create(JSONUtil.createGson()))

                //创建retrofit
                .build();
    }
}