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

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

public class App extends Application {

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

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;
}
}

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;
} @Override
public String toString() {
return "name:"+name+",packageName:"+packageName ;
}
}

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

public interface HttpGetService {

    @GET("url")
Observable<BaseResultEntity<Data>> getData();
}

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();
} @Override
public T call(BaseResultEntity<T> httpResult) {
//map 定义转换规则
if (httpResult.getRet() == 0) {//0失败,1成功
throw new HttpTimeException(httpResult.getMsg());
}
return httpResult.getData();
}
}

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

public class DataApi extends BaseApi<Data> {

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

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

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

Retrofit的初次使用的更多相关文章

  1. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  2. [旧][Android] Retrofit 初步使用

    备注 原发表于2016.04.13,资料已过时,仅作备份,谨慎参考 Retrofit 是什么? Retrofit is a type-safe HTTP client for Android and ...

  3. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  4. Android Retrofit 2.0 使用-补充篇

    推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...

  5. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

  6. 快速Android开发系列网络篇之Retrofit

    Retrofit是一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎 ...

  7. android快捷开发之Retrofit网络加载框架的简单使用

    大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据 ...

  8. Retrofit结合RxJava使用指南

    Retrofit结合RxJava使用指南 Retrofit是一个当前很流行的网络请求库, 官网的介绍是: "Type-safe HTTP client for Android and Jav ...

  9. 用Retrofit发送请求中添加身份验证

    用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...

随机推荐

  1. Setting up Latex-vim (or Latex-suite) plugin within macVim under Mac OSX Yosemite 2015-1-20 by congliu

    1. Overview: Vim是命令行下的文本编辑程序,gVim是Vim的Linux下的图形化版本,macVim是Mac下的图形化版本 Latex-vim是vim写Latex文件时的插件 Skim是 ...

  2. js基础--获取浏览器当前页面的滚动条高度的兼容写法

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 在开发中,兼容性问题是最常见的,今天就来介绍一下关于获取滚动条高度的兼容性写法,宽度同理,我在这里就不一一解释了 各浏览器 ...

  3. python 匿名函数与三元运算

    匿名函数 匿名函数就是不需要显示式的指定函数名 首先看一行代码: def calc(x,y): return x*y print(calc(2,3)) # 换成匿名函数 calc = lambda x ...

  4. RestTemplate的设置及使用

    概述 RestTemplate是spring内置的http请求封装,在使用spring的情况下,http请求直接使用RestTemplate是不错的选择. Rest服务端 使用RestTemplate ...

  5. iOS 中判断应用程序是否为第一次打开

    第一步:在AppDelegate中当应用启动完成后加入一下代码: - (BOOL)application:(UIApplication *)application didFinishLaunching ...

  6. 二十二、Hadoop学记笔记————Kafka 基础实战 :消费者和生产者实例

    kafka的客户端也支持其他语言,这里主要介绍python和java的实现,这两门语言比较主流和热门 图中有四个分区,每个图形对应一个consumer,任意一对一即可 获取topic的分区数,每个分区 ...

  7. SSM-SpringMVC-21:SpringMVC中处理器方法之返回值Object篇

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 今天要记录的是处理方法,返回值为Object的那种,我给它分了一下类: 1.返回值为Object数值(例如1) ...

  8. InnoDB页压缩技术

    Ⅰ.想起一个报错 1.1 创建表报错 (root@localhost) [(none)]> create tablespace ger_space add datafile 'ger_space ...

  9. An annotation based command line parser

    Java命令行选项解析之Commons-CLI & Args4J & JCommander http://rensanning.iteye.com/blog/2161201 JComm ...

  10. 深入Spring Boot:那些注入不了的Spring占位符(${}表达式)

    Spring里的占位符 spring里的占位符通常表现的形式是: <bean id="dataSource" destroy-method="close" ...