当前位置:首页 > 分类11 > 正文

OkRx扩展,让OkGo完美结合RxJava,比Retrofit更简单易用_1

摘要: OkRx扩展,让OkGo完美结合RxJava,比Retrofit更简单易用OkRx扩展,让OkGo完美结合RxJava,比Ret...
OkRx扩展,让OkGo完美结合RxJava,比Retrofit更简单易用

OkRx扩展,让OkGo完美结合RxJava,比Retrofit更简单易用

OkGo - Rx扩展,可以方便的和RxJava联用,如果你熟悉Retrofit,那么这个框架和Retrofit使用方式很像。</br>
以下是该项目相关文章的传送门:OkGo主项目详细使用方法:OkGo,一个专注于让网络请求更简单的框架,与RxJava完美结合,比Retrofit更简单易用。OkGo2.0版本以前的前身OkHttpUtils介绍:OkHttpUtils一个专注于让网络请求更简单的框架联系方式项目Github开源地址:https://github.com/jeasonlzy联系方式:QQ群(489873144)如果你想直接运行apk看效果,点击这里下载:okgo_v2.0.0.apk如何选择网络框架说了这么多功能,我们来看看为什么要使用OkGo这个框架。首先目前主流的几个网络框架
android-async-httpxUtilsvolleyretrofitokhttp在此引用知乎上Stay Zhang的回答:
我们来先说一个常识性的错误:volley, retrofit, android-async-http 帮你封装了具体的请求,线程切换以及数据转换。而OkHttp 是基于http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。
所以不要混淆。
-----以下纯个人主观见解首先,我想即使你单纯使用OkHttp,还是会再包一层的,这样就等价于Volley之流的框架,只是封装的好与坏而已。
android-async-http内部实现是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
Volley是官方出的,volley在设计的时候是将具体的请求客户端做了下封装:HurlStack,也就是说可以支持HttpUrlConnection, HttpClient, OkHttp,相当于模版模式吧,这样解耦还是非常方便的,可以随意切换,如果你之前使用过Volley,并习惯使用,那直接写个OkHttp扩展就行了。
Retrofit因为也是square出的,所以大家可能对它更崇拜些。Retrofit的跟Volley是一个套路,但解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。然而目前OkGo已经完全可以替代Retrofit,同样支持RxJava,但具有更强的灵活性和易用性。
OkGo的优势优势一:性能高,专注于简单易用的网络请求,使用主流的okhttp进行封装,对于okhttp大家都知道,在Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了,并且支持HTTP2/SPDY黑科技,支持socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,拥有队列线程池,轻松写并发。优势二:特有的网络缓存模式,是大多数网络框架所不具备的,说一个应用场景,老板说我们的app不仅需要在有网的情况下展示最新的网络数据,还要在没网的情况下使用缓存数据,这时候是不是项目中出现了大量的代码判断当前网络状况,根据不同的状态保存不同的数据,然后决定是否使用缓存。细想一下,这是个通用的写法,于是OkGo提供了五种缓存模式,让你不用关心缓存的实现,而专注于数据的处理。(具体缓存的使用方法请看最后第四章节)。优势三:方便易用的扩展接口,可以添加全局的公共参数,全局拦截器,全局超时时间,更可以对单个请求定制拦截器,超时时间,请求参数修改等等,在使用上更是方便,原生支持的链式调用让你的请求更加清晰。优势四:强大的Cookie保持策略,我们知道在客户端对cookie的获取是个不太简单的事情,特别是还要处理cookie的过期时间,持久化策略等等,OkGo帮你彻底解决Cookie的难题,默认拥有内存存储和持久化存储两种实现,cookie全程自动管理,并且提供了额外的addCookie方式,允许介入到自动管理的过程中,添加你想创建的任何cookie。所以就说这么多啦,选最适合项目的,选大多数人选择的,选简单易用的,选择使用流行技术的,就这么个标准,而OkGo正是在这种情况下诞生啦!!
OkRx目前支持完美结合RxJava比Retrofit更简单方便网络请求和RxJava调用,一条链点到底支持Json数据的自动解析转换OkGo包含的所有请求功能,OkRx全部支持目前使用的RxJava版本如下
    compile 'io.reactivex:rxjava:1.2.0'    compile 'io.reactivex:rxandroid:1.2.1'
一.用法0.最开始的配置OkRxOkGo 的扩展,所以要想使用OkRx,那么请先按照OkGo的配置文档,做相应的初始化。
1.在gradle中添加一行依赖
    compile 'com.lzy.net:okrx:0.1.0'  //Rx扩展       或者        compile 'com.lzy.net:okrx:+'      //使用+,引用最新版
2.调用请求代码我们还是像正常使用OkGo的方式一样,传入我们需要请求的Url,和我们需要的参数,那么最关键的一行就是最后调用getCall()这个方法。
这里传入的两个参数进行一下说明:
第一个参数是Convert对象,表示需要将服务器返回的数据流解析成什么对象,这里我们先用最简单的String做转换,StringConvert对象也是库中内置的转换器。
第二个参数是Adapter对象,表示需要将解析的结果用什么对象包装,该参数可以省略不写,那么默认是Call<T>这个对象包装,当然,我们要使用Rx的调用,使用这个肯定是不行的,所以我们传入OkRx扩展的RxAdapter对象,他是使用的Observable<T>对象包装的,同样他需要一个泛型,该泛型必须和Convert的泛型一致,否则就发生了类型转换异常。
以上两个参数具体的注意事项我们后续详细再说。
 Observable<String> call = OkGo.post(Urls.URL_METHOD)//                                    .headers("aaa", "111")//                                    .params("bbb", "222")//                                    .getCall(StringConvert.create(), RxAdapter.<String>create());
3.调用Rx转换代码现在我们已经获取了Observable对象了,熟悉RxJava的你难道还不会使用了吗,以下是简单的在请求前弹出loading,结束后展示信息的代码。
call.doOnSubscribe(new Action0() {        @Override        public void call() {            showLoading();  //开始请求前显示对话框        }    })//    .observeOn(AndroidSchedulers.mainThread())//切换到主线程    .subscribe(new Action1<String>() {        @Override        public void call(String s) {            dismissLoading();               //请求成功,关闭对话框            handleResponse(s, null, null);        }    }, new Action1<Throwable>() {        @Override        public void call(Throwable throwable) {            throwable.printStackTrace();            dismissLoading();       //请求失败            showToast("请求失败");            handleError(null, null);        }    });
4.代码整合上面的调用是不是很简单,有人可能觉得链试代码太长,没关系,我们完全可以像Retrofit一样,自己写一个ServerApi类,这里面管理了所有的接口请求和参数,只是OkGo并不是采用的注解和反射实现的,而是通过传参来实现,相信对你你来讲,这样的方式更加直观。我们再将调用配合上lambda表达式,那么最后的结果是这样的:
这样的请求方式有没有惊艳到你!!
    OkGo.post(Urls.URL_METHOD)//        .headers("aaa", "111")//        .params("bbb", "222")//        .getCall(StringConvert.create(), RxAdapter.<String>create())//以上为产生请求事件,请求默认发生在IO线程        .doOnSubscribe(() -> {            showLoading();  //开始请求前显示对话框        })        .observeOn(AndroidSchedulers.mainThread())//切换到主线程        .subscribe(s -> {            dismissLoading();               //请求成功,关闭对话框            handleResponse(s, null, null);        }, throwable -> {            throwable.printStackTrace();            dismissLoading();       //请求失败            showToast("请求失败");            handleError(null, null);        });
5。其他请求如果你想请求String,那么将第2步中的getCall方法,就是你想要的。
    getCall(StringConvert.create(), RxAdapter.<String>create())
如果你想请求Bitmap,那么将第2步中的getCall方法,改成如下形式
    getCall(BitmapConvert.create(), RxAdapter.<Bitmap>create())
如果你想下载File,那么还是修改这行
    getCall(new FileConvert(), RxAdapter.<File>create())
如果你想直接解析Json对象,聪明的你一定知道还是这行。注意看Convert最后有个大括号,千万不能忘记
    getCall(new JsonConvert<ServerModel>() {}, RxAdapter.<ServerModel>create())
如果你想直接解析List<Bean>对象,也很简单。注意看Convert最后有个大括号,千万不能忘记
    getCall(new JsonConvert<List<ServerModel>>() {}, RxAdapter.<List<ServerModel>>create())
我想,对于一款普通的app,这些请求一定能满足你90%以上的需求,而且使用方便,只需要改一行代码,就能直接获取到你想要的数据。
6.取消请求推荐对每一个网络请求的Subscription对象都交由统一的CompositeSubscription去管理,在界面销毁或者需要取消的地方调用。例如:在Activity中,当Activity销毁取消请求,可以在onDestory里面统一取消。
@Overrideprotected void onDestroy() {    super.onDestroy();    unSubscribe();}
三、自定义Convert使用目前内部提供的包含Converter, StringConvert ,BitmapConvert ,FileConvert ,可以根据自己的需求去自定义Convert
Converter: 接口,所有转换器必须实现StringConvert:将网络结果解析转成StringBitmapConvert:将网络结果解析转成BitmapFileConvert:将网络结果解析转成File对于自定义的JsonConvert,由于不同的业务实现都不一样,所以并不放在库中,提供参考实现供自己修改如果你觉得好或者给你带来了方便,请打赏一下给作者买杯咖啡喝吧。

Android开发常用轮子

一、快速开发框架
XSnow基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络、上传、下载、缓存、事件总线、权限管理、数据库、图片加载,基本都是项目中必用功能,每个模块充分解耦,可自由拓展2.MVPArms一个整合了大量主流开源项目高度可配置化的 Android MVP 快速集成框架(包括Mvp、 Dagger2、RxJava、RxAndroid、Rxlifecycle、RxCache、RxPermissions、RxErroHandler、Retrofit、Okhttp、AndroidAutoSize、Gson、Butterknife、AndroidEventBus、Timber、Glide、LeakCanary)
3.Android-ZBLibraryAndroid MVP快速开发框架,做国内 「Demo最全面」「注释最详细」「使用最简单」「代码最严谨」的Android开源UI框架(包括OKHttp、UIL图片加载、ZXing二维码、沉浸状态栏、下载安装、自动缓存以及各种Base、Demo、UI、Util)4.MVVMHabitMVVMHabit是以谷歌DataBinding+LiveData+ViewModel框架为基础,整合Okhttp+RxJava+Retrofit+Glide等流行模块,加上各种原生控件自定义的BindingAdapter,让事件与数据源完美绑定的一款容易上瘾的实用性MVVM快速开发框架。
5.AndroidFireAndroidFire,一款新闻阅读 App框架,基于 Material Design + MVP + RxJava + Retrofit + Glide,基本涵盖了当前 Android 端开发最常用的主流框架,基于此框架可以快速开发一个app。
二、网络相关
1.okhttp功能强大的网络请求框架
2.retrofit基于OKhttp的网络请求框架,配合Rxjava使用,逻辑非常简洁
3.okhttp-OkGo该库是基于 Http 协议,封装了 OkHttp 的网络请求框架,比 Retrofit 更简单易用,支持 RxJava,RxJava2,支持自定义缓存,支持批量断点下载管理和批量上传管理功能
4.retrofit + rxjava案例RxJavaSamples
5.rxjava生命周期管理RxLifecycle
6.运行时权限申请 RxPermissions
三、注解与事件总线
1.注解框架butterknife编译时注解框架,提供view和点击事件的绑定
2.注解框架 dagger不仅可以view绑定,还可以提供对象绑定
3.事件总线EventBusEvent bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality
4.事件总线 RxBus用rxjava实现的eventbus
5.butterknife插件android-butterknife-zeleznyAndroid Studio plug-in for generating ButterKnife injections from selected layout XML.(一键生成view的绑定代码)
四、控件相关
1.下拉刷新控件 SmartRefreshLayout正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout, 其他第三方的 Ultra-Pull-To-Refresh、TwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer
2.下拉刷新TwinklingRefreshLayout支持下拉刷新和上拉加载的RefreshLayout,自带越界回弹效果,支持RecyclerView,AbsListView,ScrollView,WebView
3.适配器BaseRecyclerViewAdapterHelper优化Adapter代码(减少百分之70%代码)添加点击item点击、长按事件、以及item子控件的点击事件添加加载动画(一行代码轻松切换5种默认动画)添加头部、尾部、下拉刷新、上拉加载(感觉又回到ListView时代)设置自定义的加载更多布局添加分组(随心定义分组头部)自定义不同的item类型(简单配置、无需重写额外方法)设置空布局(比Listview的setEmptyView还要好用!)添加拖拽item
4.图片选择器(包括图片、视频、音频的选取和预览)PictureSelector一款针对android平台下的图片选择器,支持从相册或拍照选择图片或视频、音频,支持动态权限获取、裁剪(单图or多图裁剪)、压缩、主题自定义配置等功能、适配android 6.0+系统的开源图片选择框架。
5.基于WebView的带进度条的webview控件AgentWebAgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库,提供了 Android WebView 一系列的问题解决方案 ,并且轻量和极度灵活
6.图片加载框架 glide一个强大的图片加载和缓存库
7.图片压缩Luban可能是最接近微信朋友圈的图片压缩算法
8.圆角图片控件CircleImageView
9.腾讯出品的webview控件 VasSonicVasSonic是一个轻量级和高性能混合框架由腾讯脉管的团队,这是为了加快网站的第一个屏幕Android和iOS平台上工作
10.图片缩放控件 PhotoView不需要写任何代码就可以实现图片手势缩放,旋转
11.简洁好看的对话框sweet-alert-dialog
12.vlayoutVirtualLayout是一个针对RecyclerView的LayoutManager扩展, 主要提供一整套布局方案和布局间的组件复用的问题
13.QMUI_AndroidQMUI Android 的设计目的是用于辅助快速搭建一个具备基本设计还原效果的 Android 项目,同时利用自身提供的丰富控件及兼容处理,让开发者能专注于业务需求而无需耗费精力在基础代码的设计上。不管是新项目的创建,或是已有项目的维护,均可使开发效率和项目质量得到大幅度提升
14.配合glide改变图片显示形状的库glide-transformations
15.视频播放器 GSYVideoPlayer视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS,支持弹幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,列表切换详情页面无缝播放,rtsp、concat、mpeg
16.加载动画 Android-SpinKit
17.闪烁加载视图 ShimmerRecyclerView在加载时显示闪烁图层,加载完成时显示数据
18.日历控件 CalendarViewAndroid上一个优雅、万能自定义UI、支持周视图、自定义周起始、性能高效的日历控件,支持热插拔实现的UI定制!支持标记、自定义颜色、农历、自定义月视图各种显示模式等。Canvas绘制,速度快、占用内存低,你真的想不到日历居然还可以如此优雅!An elegant, highly customized and high-performance Calendar Widget on Android.
19.图表控件MPAndroidChart
20.图片轮播控件 MZBannerView仿魅族BannerView,图片轮播控件,支持多种模式切换:普通ViewPager使用,普通Banner使用,仿魅族Banner使用
21.好看的图片和视频选择器Matisse知乎开源的图片选择器,简洁大方
22.自定义layoutmanage LayoutManagerGroup自定义LayoutManager
23.时间、地区、三级联动选择器 Android-PickerView
24.选项选择器 AndroidPicker
25.通用弹框 XPopup可以替代Dialog,PopupWindow,PopupMenu,BottomSheet,DrawerLayout,Spinner等组件,自带十几种效果良好的动画, 支持完全的UI和动画自定义!
26.PinnedSectionItemDecoration大粘性标签支持垂直方向的线性、网格、瀑布流布局管理器小粘性标签支持垂直方向的线性和网格一行只有一列网格布局管理器支持标签的单击、双击和长按事件支持标签内部子控件的单击、双击和长按事件可以绘制线性、网格、瀑布流布局的分隔线,支持自定义分割线样式(PS:垂直瀑布流布局需要Item高度固定,不能随机变化导致Item位置切换
27.SuperTextView为 View 设置圆角支持单独控制每一个圆角为 View 添加边框为文字增加描边或空心效果支持最多 2 个 Drawable 展示可准确控制 Drawable 大小及位置支持渐变色背景触摸变色展示图片,包括网络图片为图片设置圆角为图片增加边框可插入操作的 Adjuster 模块修改 Drawable 的颜色修改 Drawable 的旋转角度支持文字渐变色效果支持为 Drawable 区域单独设置点击事件支持 Gif 图展示支持为 Gif 图添加边框,以及圆角支持 Gif 图暂停/播放、修改帧率支持提取指定 **Gif 帧
五、系统相关
1.日志框架loggerSimple, pretty and powerful logger for android
2.内存溢出检测leakcanary用于监测App内存泄漏
性能监控AndroidPerformanceMonitorBlockCanary是一个Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复4.状态栏管理 StatusBarCompat
5.插件框架 Shadow复用独立安装App的源码:插件App的源码原本就是可以正常安装运行的。零反射无Hack实现插件技术:从理论上就已经确定无需对任何系统做兼容开发,更无任何隐藏API调用,和Google限制非公开SDK接口访问的策略完全不冲突。全动态插件框架:一次性实现完美的插件框架很难,但Shadow将这些实现全部动态化起来,使插件框架的代码成为了插件的一部分。插件的迭代不再受宿主打包了旧版本插件框架所限制。宿主增量极小:得益于全动态实现,真正合入宿主程序的代码量极小(15KB,160方法数左右)。Kotlin实现:core.loader,core.transform核心代码完全用Kotlin实现,代码简洁易维护
6.今日头条屏幕适配方案 AndroidAutoSize今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案
7.热修复框架 tinkerTinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk8.组件化路由框架 ARouter帮助 Android App 进行组件化改造的路由框架
9.权限管理 AndPermission动态权限申请
六、其他
1.android 学习笔记 AndroidNote
2.常用工具类 AndroidUtilCode
3.常用工具# RxToolAndroid开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j压缩(支持分卷压缩与加密) | 一键集成UCrop选择圆形头像 | 一键集成二维码和条形码的扫描与生成 | 常用Dialog | WebView的封装可播放视频 | 仿斗鱼滑动验证码 | Toast封装 | 震动 | GPS | Location定位 | 图片缩放 | Exif 图片添加地理位置信息(经纬度) | 蛛网等级 | 颜色选择器 | ArcGis | VTPK | 编译运行一下说不定会找到惊喜。

发表评论