rxjava封装,RxBus封装(上线项目集成,声明周期管理,处理溢出内存,支持同时多个请求。)
RxLibrary工程:
1.rxjava2 + retrofit2的封装,常用的请求(Get,Post,文件上传,文件下载),防止内存泄漏,简单便捷,支持自定义loading等属性。
2.RxBus的使用,用法完全与EvenBus一样。
效果图
集成
根目录下build.gradle的allprojects-repositories节点下添加maven{url"https://dl.bintray.com/bikie/bhm-sdk"}
compile 'com.bhm.sdk.rxlibrary:RxLibrary:2.4.1'
或者
<dependency>
<groupId>com.bhm.sdk.rxlibrary</groupId>
<artifactId>RxLibrary</artifactId>
<version>2.4.1</version>
<type>pom</type>
</dependency>
一、rxjava2 + retrofit2的使用
强烈建议参考demo,MianActivity包含了常用的用法及用法介绍。
第一步,继承RxBaseActivity或者RxBaseFragment,添加内存管理的机制,同时获取rxManager对象,rxManager是管理观察者的类,当取消请求、中断请求等可调用对应的方法。注意:如果项目BaseActivity继承了别的Activity,则需在BaseActivity中添加RxAppCompatActivity的代码,并且生成RxManager对象,解析的实体类必须继承BaseResponse类。Fragment同理哦。
第二步,使用。
RxBuilder builder = RxBuilder.newBuilder(this)
//.setLoadingDialog(RxLoadingDialog.getDefaultDialog())
.setLoadingDialog(new MyLoadingDialog())
.setDialogAttribute(true, false, false)
//.setHttpTimeOut()
.setIsLogOutPut(true)//默认是false
.setIsDefaultToast(true, rxManager)
.bindRx();
Observable<DoGetEntity> observable = builder
.createApi(HttpApi.class, "http://news-at.zhihu.com")
.getData("Bearer aedfc1246d0b4c3f046be2d50b34d6ff", "1");
builder.setCallBack(observable, new CallBack<DoGetEntity>() {
@Override
public void onStart(Disposable disposable) {
}
@Override
public void onSuccess(DoGetEntity response) {
Log.i("MainActivity--> ", response.getDate());
Toast.makeText(MainActivity.this, response.getDate(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFail(Throwable e) {
}
@Override
public void onComplete() {
}
});
HttpApi是一个接口,getData是HttpApi中的方法。
Host 为域名。
以下介绍下HttpApi中常用注解的使用:
1.get请求:方法前添加@GET("url"),参数 @Query、@QueryMap
<br>例(url和域名拼接好后组成完整链接,当然我们不需要自己拼接,Retrofit会处理)</br>
@GET("福利/10/1")
Observable<Object> getData(@Header("token") String token, @Query("type") String type);
2.post请求:方法前添加@FormUrlEncoded和@POST("url")
Observable<Object> getDataPost(@Field("once") boolean once_no);
3.文件上传:方法前添加@Multipart和@POST("url")
Observable<Object> upload(
@Header("token") String token,
@Part("filename") RequestBody description,
@Part("id") RequestBody id,
@Part MultipartBody.Part file);
其中RequestBody的生成:
RequestBody.create(MediaType.parse("text/plain"),"id"
MultipartBody.Part的生成:
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg; charset=UTF-8"),file);
MultipartBody.Part part= MultipartBody.Part.createFormData("file", file.getName(), requestBody);
4.文件下载:方法前添加@Streaming和@GET
@Streaming
@GET
Observable<ResponseBody> downLoad(@Url String url);
其中@GET后不需指定url,参数@Url指定了完整的url,所以也不需域名Host的指定。
二、RxBus的使用
1.订阅RxBus.get().register(this);
一般在activity/fragment的oncreate方法中添加
2.取消订阅RxBus.get().unRegister(this);
一般在activity/fragment的的ondestory方法添加
3.接收event,处理
在activity/fragment中添加如下方法
@Subscribe(code = 1111,threadMode = ThreadMode.MAIN)
public void rxBusEvent(Entity entity){
if(null != entity){
Toast.makeText(this, "RxBus改变了MainActivity的标题", Toast.LENGTH_SHORT).show();
}
}
threadMode:MAIN,NEW_THREAD,CURRENT_THREAD(默认).
4.在任意一个地方发送
RxBus.get().send(1111, entity);
rxjava封装,RxBus封装(上线项目集成,声明周期管理,处理溢出内存,支持同时多个请求。)的更多相关文章
- Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理
我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...
- 044、vloume声明周期管理(2019-03-07 周四)
参考https://www.cnblogs.com/CloudMan6/p/7214828.html 如果Data Volume 中存放的是重要的应用数据,如何管理volume对应用至关重要. ...
- Unity容器声明周期管理
Having said that, here is a solution that you can use with the Unity container: Create some custom a ...
- retrofit+RXjava二次封装
接入说明:项目中已集成RXjava,RXandroid.Retrofit,为避免包冲突,不须要再次接入. 就可以直接使用RXjava,Retrofit的所有api. github地址:https:// ...
- JYadmin-react-antd react+antd封装的优秀后台模板集成方案("^1.0.0")
版本:[ "JYadmin-react-antd": "^1.0.0"] 版权所有:微信公众号[微新悦] 原文链接:https://www.weixinyue. ...
- Android RxJava+Retrofit完美封装
作者简介 本篇来自 小河马 的投稿,分享了自己是如何进行 RxJava+Retrofit 的封装.本文的技术点自然没话说,另外对于这种模块化的思路,希望能帮助到大家.最后提前祝大家周末愉快以及圣诞快乐 ...
- ssm项目集成
ssm项目集成 说明:ssm指的是 spring + springMvc+ mybatis,是目前开发比较流行的集成方式,可以较好的实现前后端分离 spring与mybatis的集成,是通过配置文件a ...
- Apollo简介及项目集成
1. 产生背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址…… 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
随机推荐
- Quicklz压缩算法
以前对压缩算法一无所知,只是知道哈弗曼编码能做这种事情,但是感觉这样的方法奇慢无比.昨天下午看了下号称世界上最快的压缩算法Quicklz,对压缩的基本思路有了一定的了解.一般的压缩程序的要求读入文件之 ...
- COM组件开发实践(一)
Preface 因为项目需要,开始从事ActiveX方面的工作,看了一些资料,可惜都是些COM原理方面的,没有切合实际动手的东西,在CodeProject上读完David Marcionek的文章[1 ...
- TModJS:使用tmodjs
ylbtech-TModJS:使用tmodjs 1.返回顶部 1. 1.安装 npm install -g tmodjs 2.配置 我的模板都放在tpl文件夹中,htmls用于存放模板页面,每一个后缀 ...
- php 有时候难以输出显示的信息可以用ob缓冲区来做
有时候一些难以打印的信息可以通过缓冲区来做,比如手机扫码上的信息看不到这种, 当然也可以通过fiddler来抓包,也可以看到这些信息,直接上代码: <?php ob_start(); //开启缓 ...
- React-Native 基本环境的搭建
看了一些RN资料,仅仅了解到人们对 RN(以下简称 React_native 框架) 的使用描述以及评价,就觉得RN是一个很不错的框架,值得学习.今天就开始写我的学习记录,也给大家分享一下.下面进入正 ...
- MongoDB -- 安装(win 10)
1. 下载安装包: mongodb-win32-x86_64-2008plus-ssl-4.0.10-signed.msi https://www.mongodb.com/download-cente ...
- shell的split生成的文件按规律命名及添加扩展名
可以参考 用shell切分文件--split shell下的split命令主要用于分割一些大文件用的,比如经常要用到将一个几十万行的TXT分割为多少行一个的文件,非常有用,唯一坑爹的是,切割后的文件不 ...
- vim opencv
http://blog.csdn.net/fdl19881/article/details/7275203 ctags .vim: http://www.vim.org/scripts/script. ...
- 1.6-1.8 HBase表的物理模型
一.HBase 物理模型 1. 1.Table中的所有行都按照row key的字典序排列: 2.Table在行的方向上分割为多个Region: 3.Region按天小分割的,每个表开始只有一个regi ...
- Python死锁与递归锁
Lock() 互斥锁会导致死锁,用RLock()递归锁代替. 递归锁:可以连续acquire多次,每acquire一次计数器+1(无论acquire的是哪个锁),只有计数为0才能被acquire mu ...