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()); } }; }}
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
- Retrofit框架的使用
- Retrofit框架的使用
- 网络请求框架Retrofit的基本使用
- android框架之Retrofit的使用
- Retrofit网络请求框架的基本使用
- 【Android - 框架】之Retrofit的使用
- 【Android - 框架】之Retrofit+RxJava的使用
- Android网络框架Retrofit的综合使用
- 优雅的使用MVP+RxJava+Retrofit框架
- Retrofit网络框架的封装使用
- Android Retrofit 网络框架的使用
- Retrofit框架使用笔记
- Retrofit框架基本使用
- 使用retrofit框架
- Retrofit 2.0框架使用。
- retrofit框架使用
- 简单的retrofit框架
- Retrofit网络框架入门使用
- mysql-关闭密码强度插件validate_password
- 初窥Linux 之 我最常用的20条命令
- request/jsp
- myeclipse中tomcat异常报错的解决办法
- Javascript notes
- Retrofit框架的使用
- POJ 2531-Network Saboteur(N个点分成两部分)
- 【NOIP2010】【并查集】T3 关押罪犯 题解
- Maven新建webapp项目index.jsp报错
- CSDN-markdown编辑器使用说明
- 解决"The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path"问题
- 蓝莲花的象征
- error: 'vector' does not name a type
- 非常详细GC学习笔记