Retrofit框架的使用

步骤一:导入相应的包:

    在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值