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. 微信小程序-获取经纬度

    微信小程序-获取经纬度 最近公司新功能 要求在外的市场人员 发送位置信息回来. 用的还是微信小程序开发.... 微信小程序 提供一个接口 getLocation 这个接口反回来的位置 相对实际位置 相 ...

  2. Java 的字节流文件读取(一)

    上篇文章我们介绍了抽象化磁盘文件的 File 类型,它仅仅用于抽象化描述一个磁盘文件或目录,却不具备访问和修改一个文件内容的能力. Java 的 IO 流就是用于读写文件内容的一种设计,它能完成将磁盘 ...

  3. ubuntu18.04安装搜狗拼音

    1.下载好搜狗安装包http://pinyin.sogou.com/linux/ ,注意位数! 2.打开终端安装依赖    sudo apt install libfcitx-qt0 3.提取下载好的 ...

  4. Git分支合并冲突解决(续)

    接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...

  5. ndarray数据类型

    dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息 In [18]: sim1 = np.array([1,2,3],dtype=np.float64) ...

  6. linux 获取网络状态信息(Rtnetlink)

    一.Rtnetlink Rtnetlink 允许对内核路由表进行读和更改,它用于内核与各个子系统之间(路由子系统.IP地址.链接参数等)的通信, 用户空间可以通过NET_LINK_ROUTER soc ...

  7. SSM-SpringMVC-18:SpringMVC中参数自动装配

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 在处理方法中,参数写上之后,只要符合特定规则,就可以自动装配 首先 其次是:自定义的参数的自动装配: 案例如 ...

  8. SSM-Spring-14:Spring中默认自动代理DefaultAdvisorAutoProxyCreator

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 默认自动代理DefaultAdvisorAutoProxyCreator 本处没有什么要讲的,放原代码 ISo ...

  9. Linux下解压后缀名为".tar.xz"的文件

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=576 1 解压".xz" xz -d your_file_name.tar.xz 注:运行上述命令后 ...

  10. Java开源生鲜电商平台-售后模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-售后模块的设计与架构(源码可下载) 说明:任何一个的电商平台都有售后服务系统,那么对于我们这个生鲜的电商平台,售后系统需要思考以下几个维度. 1. 买家的需求维度 说明:买家 ...