retrofit_rxjava_okhttp封装类

来源:互联网 发布:js是什么端语言 编辑:程序博客网 时间:2024/06/06 16:44

Retrofit+Rxjava+OkHttp 单例模式+双重锁模式 封装类


package com.app.mvp.retrofit_rxjava_okhttp;import okhttp3.OkHttpClient;import retrofit2.Retrofit;import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;/** * Retrofit+Rxjava+OkHttp 单例模式+双重锁模式 封装类 */public class RetrofitUnitl {    private Retrofit mRetrofit;    private String baseUrl;    OkHttpClient client;    private static RetrofitUnitl mRetrofitManager;    private RetrofitUnitl(String baseUrl,OkHttpClient client){        this.baseUrl=baseUrl;        this.client=client;        initRetrofit();    }    //单例模式+双重锁模式 封装方法    public static synchronized RetrofitUnitl getInstance(String baseUrl,OkHttpClient client){        if (mRetrofitManager == null){            mRetrofitManager = new RetrofitUnitl(baseUrl,client);        }        return mRetrofitManager;    }    //实例化Retrofit请求    private void initRetrofit() {        mRetrofit = new Retrofit.Builder()                .baseUrl(baseUrl)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .client(client)                .build();    }    //封装泛型方法    public <T> T setCreate(Class<T> reqServer) {        return mRetrofit.create(reqServer);    }}

拦截器

package com.app.mvp.retrofit_rxjava_okhttp;import java.io.IOException;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;//自定义添加公共请求参数的拦截器public class LoggingInterceptor implements Interceptor {  @Override public Response intercept(Chain chain) throws IOException {    Request request = chain.request();    //开始响应的时间    long t1 = System.nanoTime();    //执行请求,返回响应的数据    Response response = chain.proceed(request);    //请求结束,响应返回    long t2 = System.nanoTime();    //响应的耗费时间    System.out.println(" this request  url  " + response.request().url() + "  "  + (t2 - t1)/1000000);    return response;  }}

IGetDataBase

package com.app.mvp.retrofit;import com.app.mvp.bean.Bean;import io.reactivex.Observable;import retrofit2.http.GET;import retrofit2.http.Query;/** * 网络接口数据的请求类 * 接口: http://api.tianapi.com/military/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 */public interface GetDataInterface {    /*     * 使用Observable被观察者模式下的的get请求数据 @Query注解传递参数     */    @GET("/military/?key=18e883dd6b316eb1d97fd86338abbf06&num=10")    Observable<Bean> getData(@Query("key") String key,@Query("num") int num);}

mymodel

package com.app.mvp.model;import com.app.mvp.bean.Bean;import com.app.mvp.retrofit.GetDataInterface;import com.app.mvp.retrofit_rxjava_okhttp.LoggingInterceptor;import com.app.mvp.retrofit_rxjava_okhttp.RetrofitUnitl;import java.util.concurrent.TimeUnit;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.functions.Consumer;import io.reactivex.schedulers.Schedulers;import okhttp3.OkHttpClient;//model接口实现类public class MyModel {    /**     * 使用Retrofit结合RxJava的get请求数据,使用@Query注解传递参数     * @param callBack     */    public void getData(final ModelCallBack callBack) {        //使用okhttp请求,添加拦截器时把下面代码解释        OkHttpClient ok = new OkHttpClient.Builder()                .connectTimeout(20000, TimeUnit.SECONDS)                .writeTimeout(20000,TimeUnit.SECONDS)                .readTimeout(20000,TimeUnit.SECONDS)                .addInterceptor(new LoggingInterceptor())                .build();        //使用Retrofit结合RxJava,okhttp封装类的单例模式        RetrofitUnitl.getInstance("http://api.tianapi.com",ok)                .setCreate(GetDataInterface.class)                .getData("71e58b5b2f930eaf1f937407acde08fe",18)                .subscribeOn(Schedulers.io())               //请求完成后在io线程中执行                .observeOn(AndroidSchedulers.mainThread())  //最后在主线程中执行                //进行事件的订阅,使用Consumer实现                .subscribe(new Consumer<Bean>() {                    @Override                    public void accept(Bean bean) throws Exception {                        //请求成功时返回数据                        callBack.onSuccess(bean);                        System.out.println(bean.toString());                    }                });    }}


原创粉丝点击