Retrofit框架的使用

来源:互联网 发布:淘宝主图用什么软件做 编辑:程序博客网 时间:2024/06/05 21:51

步骤一:导入相应的包:

    在build.gradle中添加以下包

compile 'com.squareup.retrofit2:converter-gson:2.1.0'compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'compile 'io.reactivex.rxjava2:rxjava:2.0.1'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

步骤二:定义网络请求接口

public interface HttpApi {   public static String API_BASE_URL = "http://webapi.koplayer.com/";    //http://webapi.koplayer.com/api/OpenApi/MemberLogin    @FormUrlEncoded    @POST("/api/OpenApi/MemberLogin")    public Flowable<VipUserInfo> getVipUserInfo(@FieldMap Map<String, String> data);

步骤三:创建单例OKHtttpClient

public class OkHttpUtils {    private static final int DEFAULT_TIMEOUT = 5;    private OkHttpClient mOkHttpClient;    private OkHttpUtils(){        OkHttpClient.Builder mBuilder = new OkHttpClient.Builder();        mBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);        mOkHttpClient = mBuilder.build();    }    public OkHttpClient getOkHttpBuild(){        return mOkHttpClient;    }    //在访问HttpMethods时创建单例    private static class SingletonHolder{        private static final OkHttpUtils INSTANCE = new OkHttpUtils();    }    //获取单例    public static OkHttpUtils getInstance(){        return SingletonHolder.INSTANCE;    }}
步骤四:创建Rx处理返回

public class RxResultHelper {    public static <T> FlowableTransformer<T,T> handleeResult(){        return new FlowableTransformer<T, T>() {            @Override            public Publisher<T> apply(Flowable<T> upstream) {                return upstream.flatMap(new Function<T, Publisher<T>>() {                    @Override                    public Publisher<T> apply(T baseHttpResult) throws Exception {                        if (baseHttpResult != null){                            return createDate(baseHttpResult);                        }//                        if (baseHttpResult.Code == null){//                            return Flowable.error(new Exception(baseHttpResult.Msg));//                        }                        return Flowable.empty();                    }                });            }        };    }    private static <T> Flowable<T> createDate(final T t){        return Flowable.create(new FlowableOnSubscribe<T>() {            @Override            public void subscribe(FlowableEmitter<T> e) throws Exception {                e.onNext(t);            }        }, BackpressureStrategy.BUFFER);    }}
第五步:创建现成切换的帮助类

public class RxSchedulersHelper {    public static <T> FlowableTransformer<T,T> io_main(){            return new FlowableTransformer<T, T>() {            @Override            public Publisher<T> apply(Flowable<T> upstream) {                return upstream.map(new Function<T, T>() {                    @Override                    public T apply(T t) throws Exception {                        return t;                    }                }).subscribeOn(Schedulers.io())                        .unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());            }        };    }}


步骤六:创建Retrofit单例

public class RetrofitUtil {    private static class SingletonHolder{        private static final RetrofitUtil INSTANCES= new RetrofitUtil();    }    public static RetrofitUtil getInstance(){        return SingletonHolder.INSTANCES;    }    public Retrofit getBaseRetrofit(){        return new Retrofit.Builder()                .client(OkHttpUtils.getInstance().getOkHttpBuild())                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .baseUrl(HttpApi.API_BASE_URL)                .build();    }    public Retrofit getCustomRetrofit(String baseUrl){        return new Retrofit.Builder()                .client(OkHttpUtils.getInstance().getOkHttpBuild())                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .baseUrl(baseUrl)                .build();    }}
第七步:调用示例

public static void getVipUserInfo(Subscriber<VipUserInfo> subscriber, String account, String version, String deviceId) {    try {        Map<String, String> paras = new HashMap<String, String>();        paras.put("MemberAccount", account);        paras.put("ChannelId", version);        paras.put("MacCode", deviceId);        LoadApiServiceHelp.loadApiService()                .getVipUserInfo(paras)                .compose(RxSchedulersHelper.<VipUserInfo>io_main())                .compose(RxResultHelper.<VipUserInfo>handleeResult())                .subscribe(subscriber);    } catch (Exception e) {        e.printStackTrace();    }}

以上步骤就是Retrofit使用的全过程。

0 0