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. Maven学习(四)-- Maven的核心概念

    摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...

  2. springboot中logback打印日志

    http://blog.csdn.net/fan510988896/article/details/54409790

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

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

  4. 2018 Unite大会——《使用UPA工具优化项目》演讲实录

    2018年5月11日至13日,腾讯WeTest与Unity联合打造的移动游戏性能分析工具(Unity Performance Analysis,以下称为UPA)正式亮相2018 Unite大会,为Un ...

  5. JavaScript 异步开发全攻略(转)

    写了一本介绍 JavaScript 异步开发的小书: https://meathill.gitbooks.io/javascript-async-tutorial/content/ 除了比较详细的介绍 ...

  6. 详解MUI顶部选项卡(tab-top-webview-main)的用法

    最近用MUI做手机app的时候,遇到了一点问题.然后就对这个tab-top-webview-main的源码做了点研究,接下来我将和大家详解一下 tab-top-webview-main的用法和应该注意 ...

  7. pdb 调试

    以前写python一直用pycharm,调试啥的比较方便,最近要在远程服务器上调试一些程序,只有一个控制台就可以用pdb进行调试了.常用的只有几个命令. break 或 b 设置断点 continue ...

  8. traceback模块

    traceback模块被用来跟踪异常返回信息 如下例所示: import traceback try: raise SyntaxError, "traceback test" ex ...

  9. iOS之LLDB常用调试命令

    LLDB是个开源的内置于XCode的调试工具,这里来理一理常用用法.lldb对于命令的简称,是头部匹配方式,只要不混淆,你可以随意简称某个命令.结果为在xcode下验证所得,可能与其它平台有所误差. ...

  10. ssh 隧道

    SSH 隧道转发实战   大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人.下面是个人根据自己的需求以及在网上查找的资料配合自己的实际操作 ...