rxretrofitlibrary是一个已经写好的网络框架库,先以本地Module导入到自己的项目中。

1、它的初始化操作大多在自定义的application中完成,如:

public class App extends Application {@Overridepublic void onCreate() {super.onCreate();//初始化网络框架库RxRetrofitApp.init(this,true);}
}

View Code

2、在rxretrofitlibrary下定义一个回调信息统一封装类(即实际工作中网络请求的返回json实体类),泛型T表示用户真正关心的数据Data类,例如:

/*** 回调信息统一封装类*/
public class BaseResultEntity<T> {//  判断标示private int ret;//    提示信息private String msg;//显示数据(用户需要关心的数据)private T data;public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public T getData() {return data;}public void setData(T data) {this.data = data;}public int getRet() {return ret;}public void setRet(int ret) {this.ret = ret;}
}

View Code

3、在项目中使用GsonFormat插件快速创建简单的Data实体类

public class Data {private String downurl;private String icoUri;private String name;private String packageName;public String getDownurl() {return downurl;}public void setDownurl(String downurl) {this.downurl = downurl;}public String getIcoUri() {return icoUri;}public void setIcoUri(String icoUri) {this.icoUri = icoUri;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}@Overridepublic String toString() {return "name:"+name+",packageName:"+packageName ;}
}

View Code

4、在项目下创建相应的网络请求接口(@GET注解后带的参数为网络请求url除BaseUrl部分,因为BaseUrl保存在了5中的请求同一封装类中,便于管理)

public interface HttpGetService {@GET("url")Observable<BaseResultEntity<Data>> getData();
}

View Code

5、为了使用方便,在rxretrofitlibrary下再定义一个请求统一封装类BaseApi,此处实现的Func1接口泛型为BaseResultEntity<T>, T。如果在实际项目中,是为了使用RxJava的map操作符将BaseResultEntity<T>转换为T。(转换的方法重点在代码最下面的call方法中,根据实际的业务逻辑来定)

/*** 请求统一封装* @param <T>*/
public abstract class BaseApi<T> implements Func1<BaseResultEntity<T>, T>{//rx生命周期管理private SoftReference<RxAppCompatActivity> rxAppCompatActivity;/*回调*/private SoftReference<HttpOnNextListener> listener;/*是否能取消加载框*/private boolean cancel;/*是否显示加载框*/private boolean showProgress;/*是否需要缓存处理*/private boolean cache;/*基础url*/private String baseUrl = "http://192.168.0.101:8080/";/*方法-如果需要缓存必须设置这个参数;不需要不用設置*/private String mothed;/*超时时间-默认6秒*/private int connectionTime = 6;/*有网情况下的本地缓存时间默认60秒*/private int cookieNetWorkTime = 60;/*无网络的情况下本地缓存时间默认30天*/private int cookieNoNetWorkTime = 24 * 60 * 60 * 30;/* 失败后retry次数*/private int retryCount = 1;/*失败后retry延迟*/private long retryDelay = 100;/*失败后retry叠加延迟*/private long retryIncreaseDelay = 10;public BaseApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) {setListener(listener);setRxAppCompatActivity(rxAppCompatActivity);setShowProgress(false);setCache(false);setCancel(true);setCookieNetWorkTime(60);setCookieNoNetWorkTime(24*60*60);}/*** 设置参数** @param retrofit* @return*/public abstract Observable getObservable(Retrofit retrofit);public int getCookieNoNetWorkTime() {return cookieNoNetWorkTime;}public void setCookieNoNetWorkTime(int cookieNoNetWorkTime) {this.cookieNoNetWorkTime = cookieNoNetWorkTime;}public int getCookieNetWorkTime() {return cookieNetWorkTime;}public void setCookieNetWorkTime(int cookieNetWorkTime) {this.cookieNetWorkTime = cookieNetWorkTime;}public String getMothed() {return mothed;}public int getConnectionTime() {return connectionTime;}public void setConnectionTime(int connectionTime) {this.connectionTime = connectionTime;}public void setMothed(String mothed) {this.mothed = mothed;}public String getBaseUrl() {return baseUrl;}public void setBaseUrl(String baseUrl) {this.baseUrl = baseUrl;}public String getUrl() {return baseUrl + mothed;}public void setRxAppCompatActivity(RxAppCompatActivity rxAppCompatActivity) {this.rxAppCompatActivity = new SoftReference(rxAppCompatActivity);}public boolean isCache() {return cache;}public void setCache(boolean cache) {this.cache = cache;}public boolean isShowProgress() {return showProgress;}public void setShowProgress(boolean showProgress) {this.showProgress = showProgress;}public boolean isCancel() {return cancel;}public void setCancel(boolean cancel) {this.cancel = cancel;}public SoftReference<HttpOnNextListener> getListener() {return listener;}public void setListener(HttpOnNextListener listener) {this.listener = new SoftReference(listener);}public int getRetryCount() {return retryCount;}public void setRetryCount(int retryCount) {this.retryCount = retryCount;}public long getRetryDelay() {return retryDelay;}public void setRetryDelay(long retryDelay) {this.retryDelay = retryDelay;}public long getRetryIncreaseDelay() {return retryIncreaseDelay;}public void setRetryIncreaseDelay(long retryIncreaseDelay) {this.retryIncreaseDelay = retryIncreaseDelay;}/** 获取当前rx生命周期* @return*/public RxAppCompatActivity getRxAppCompatActivity() {return rxAppCompatActivity.get();}@Overridepublic T call(BaseResultEntity<T> httpResult) {//map 定义转换规则if (httpResult.getRet() == 0) {//0失败,1成功throw new HttpTimeException(httpResult.getMsg());}return httpResult.getData();}
}

View Code

6、在项目下创建子类DataApi来继承5中的请求统一封装类

public class DataApi extends BaseApi<Data> {public DataApi(HttpOnNextListener listener, RxAppCompatActivity rxAppCompatActivity) {super(listener, rxAppCompatActivity);//允许缓存setCache(true);//缓存的标志setMothed("AppStore/test");}@Overridepublic Observable getObservable(Retrofit retrofit) {HttpGetService httpGetService = retrofit.create(HttpGetService.class);return httpGetService.getData();}
}

View Code

7、最终在继承自RxAppCompatActivity(因为RxJava需要控制生命周期)的子Activity中调用来得到网络请求数据

DataApi api = new DataApi(new HttpOnNextListener<Data>() {@Overridepublic void onNext(Data data) {Log.i("MainActivity","onNext:"+data.toString()) ;Log.i("MainActivity","downurl:"+data.getDownurl());}@Overridepublic void onCacheNext(String string) {super.onCacheNext(string);Log.i("MainActivity","onCache:"+string);}@Overridepublic void onError(Throwable e) {super.onError(e);}},this);HttpManager manager = HttpManager.getInstance();//执行网络请求manager.doHttpDeal(api);

View Code

转载于:https://www.cnblogs.com/happy-warmth/p/10514132.html

Retrofit的初次使用相关推荐

  1. java中使用okhttpsoap,Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    Retrofit介绍: Retrofit和okHttp师出同门,也是Square的开源库,它是一个类型安全的网络请求库,Retrofit简化了网络请求流程,基于OkHtttp做了封装,解耦的更彻底:比 ...

  2. android http常用配置,Android中Retrofit+OkHttp进行HTTP网络编程的使用指南

    Retrofit介绍:Retrofit(GitHub主页https://github.com/square/okhttp)和OkHttp师出同门,也是Square的开源库,它是一个类型安全的网络请求库 ...

  3. Retrofit+协程使用填坑和优化

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1. (优化)Retrofit+协程第一次请求时卡顿现象 1.1 背景 1.2 初步解决方案 1. ...

  4. 为什么要使用Retrofit封装OkHttp,而不单独使用OkHttp?

    OkHttp的优点: 开源的轻量级框架.高效.快速的请求客户端,可以单独使用它来实现网络请求. 支持SPDY: 支持连接池,可极大减少延时: 支持Gzip压缩响应体,降低传输内容的大小: 支持Http ...

  5. Retrofit 网络请求参数注解@Path @Field @Query 等使用

    请求参数呢大致如下,到个别人的图, 下面就说下这些内容使用 其中 @Path.@Query.@QueryMap 使用 Get 请求 , 加入使用了Post 请求注解使用@Path  一般都会是项目崩溃 ...

  6. retrofit 源码分析

    callAdater可以设置RxJava2CallAdapter,目前只可用这个adapter,支持rxjava2的操作:convertAdater可以使用多种进行操作. 调用例子: Retrofit ...

  7. Retrofit源码研究

    2016-05-06 15:35:27 最近抽空研究了一下Retrofit源码,包括API使用.源码结构.使用到的设计模式.SDK的架构设计.作者设计/实现思路等,会形成一系列文章. 以前Retrof ...

  8. java dagger2_从零开始搭建一个项目(rxJava+Retrofit+Dagger2) ---上

    工程结构 Androd studio 替代eclipse给我带来最大的感觉,就是不用每次需要用到什么类库,就得去网上下载一个jar包.只要在项目app/build.gradle中加入代码,就能远程使用 ...

  9. android 添加头参数,Retrofit添加header参数的几种方法

    (1)使用注解的方式 添加一个Header参数 publicinterfaceUserService { @Headers("Cache-Control: max-age=640000&qu ...

  10. Spring Boot 中的 RestTemplate不好用?试试 Retrofit !

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 六点半起床 来源 | juejin.im/post/68 ...

最新文章

  1. 一文掌握 Linux 内存管理
  2. 进程控制2--exec族
  3. 孤独终老和勉强结婚,你会选什么?
  4. leetcode 旋转图像
  5. 运营管理整改报告范文_整改报告怎么写(安全检查整改报告范文)
  6. 《软件工程导论》课后习题答案
  7. 已知若干点求圆心_【求精干货】高中数学知识点总结归纳高一学生必须掌握
  8. 【报告分享】2022年元宇宙全球年度(202页干货):蓄积的力量-北京大学.pdf(附下载链接)...
  9. 【五级流水线CPU】—— 7. 协处理器访问指令(2条)
  10. Pytorch 的迁移学习的理解
  11. spring 容器的理论知识
  12. HDU-2686 Matrix 多进程DP
  13. AdventNet 网管管理平台
  14. Photoshop 2021安装教程附PS安装包下载
  15. Paxos算法(一)—Basic Paxos
  16. Web—信息收集(非常全)
  17. COMS门电路的设计及其优化--以异或门为例
  18. 买房贷款,“房贷20年”和“房贷30年”,哪个更划算?为什么?
  19. 谷歌浏览器f12功能修改服务器代码,Chrome(谷歌)控制台,console实用教程
  20. 学术-物理:莫比乌斯带

热门文章

  1. 防火墙配置文件iptables详解
  2. 回忆我的网络生活(一)
  3. hook原理介绍与简单实例
  4. 金陵科技学院计算机科学与技术,计算机科学与技术专业考试大纲-金陵科技学院.DOC...
  5. device 查看tensor_【ML实践笔记】05-DeepLizard教程8-9:在PyTorch中创建tensor
  6. 自己动手写crud+分页 出现问题
  7. Nginx源码分析 - HTTP模块篇 - HTTP Request解析过程(22)
  8. Nginx源码分析 - 基础数据结构篇 - 数组结构 ngx_array.c(03)
  9. nginx问题一则:nginx路径匹配特殊处理及增加cookie等二三事
  10. adb卸载手机内置软件