步骤一:导入相应的包:
在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()); } }; } }
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使用的全过程。