RxJava Android初探和常用实战代码

2024-05-04 12:32

本文主要是介绍RxJava Android初探和常用实战代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面的代码是基于RX1.0

//创建被观察者 也就是事件发布者 Subscriber 因此 SubscriberOn实际上是控制call回调应该所处线程
Observable<Integer> observable = Observable.create(new Observable.OnSubscribe<Integer>() {@Overridepublic void call(Subscriber<? super Integer> observer) {//我的回调在哪个线程由 .subscribeOn(AndroidSchedulers.mainThread()  发布者在哪个线程方法控制的Log.w(TAG, "onCall" + Thread.currentThread().getName());for (int i = 0; i < 5; i++) {observer.onNext(i);}observer.onCompleted();}
});//不订阅  call就不会触发
//观察回调在io线程 订阅回调在主线程
observable.observeOn(Schedulers.io()).subscribeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Integer>() {@Overridepublic void onCompleted() {Log.w(TAG, "Observable completed");}@Overridepublic void onError(Throwable e) {Log.w(TAG, "Oh,no! Something wrong happened!");}@Overridepublic void onNext(Integer item) {//这里的观察方法回调在哪个线程由observeOn 控制的 另外 不订阅 就不会产生回调Log.w(TAG, "Item is " + item + ",Thread:" + Thread.currentThread().getName());}
});如果不写 observeOn 和 subscribeOn则默认在调用者所在线程,s W/Example1Activity: onCallRxCachedThreadScheduler-1
10-24 16:42:04.960 8526-8613/kurtis.rx.androidexamples W/Example1Activity: Item is 0,Thread:RxCachedThreadScheduler-2

例子2 简单的适配器 与耗时请求更新模板代码

private void createObservable() {Observable<List<String>> tvShowObservable = Observable.fromCallable(new Callable<List<String>>() {@Overridepublic List<String> call() {Log.w(TAG, "我当前所在线程非ui线程" + Thread.currentThread().getName());return mRestClient.getFavoriteTvShows();//这里调用了sleep 因为使用了 subscribeOn}});mTvShowSubscription = tvShowObservable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<String>>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(List<String> tvShows) {//当onCall完成之后将调用这个。displayTvShows(tvShows);}});}@Override
protected void onDestroy() {super.onDestroy();if (mTvShowSubscription != null && !mTvShowSubscription.isUnsubscribed()) {mTvShowSubscription.unsubscribe();}
}

错误与成功回调的模板代码

private void createSingle() {Single<List<String>> tvShowSingle = Single.fromCallable(new Callable<List<String>>() {@Overridepublic List<String> call() throws Exception {/*** Uncomment me (and comment out the line below) to see what happens when an error occurs.** return RestClient.getFavoriteTvShowsWithException();*/return mRestClient.getFavoriteTvShows();// 使用 getFavoriteTvShowsWithException方法 由于抛出了异常 所以会毁掉onError}});mTvShowSubscription = tvShowSingle.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleSubscriber<List<String>>() {@Overridepublic void onSuccess(List<String> tvShows) {displayTvShows(tvShows);}@Overridepublic void onError(Throwable error) {displayErrorMessage();}});
}

需要手动调用才会触发回调的 家伙

private void createCounterEmitter() {mCounterEmitter = PublishSubject.create();mCounterEmitter.subscribe(new Observer<Integer>() {@Overridepublic void onCompleted() {Log.w(TAG,"onCompleted:");}@Overridepublic void onError(Throwable e) {Log.w(TAG,"onError:"+e);}@Overridepublic void onNext(Integer integer) {Log.w(TAG,"onNext:"+integer);mCounterDisplay.setText(String.valueOf(integer));}});
}private void onIncrementButtonClick() {mCounter++;Log.w(TAG,"request call onNext:"+mCounter);mCounterEmitter.onNext(mCounter);}

参考链接

http://www.jianshu.com/p/669eda5dc5a4http://blog.csdn.net/chen_zhang_yu/article/details/52900725

这篇关于RxJava Android初探和常用实战代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959203

相关文章

测试服务搭建之centos7下安装java

一 安装Java 1 创建普通用户 useradd userNameTest passwd userNameTest 提示输入密码:【输入wujian的密码】 user:userNameTest group:root passwd:123456789   2 给“userNameTest”分配root权限 vi /etc/sudoers 在文件中找到 # %wheel ALL=(

selenium +java 多个类公用driver问题

问题点:太久没有写selenium代码,居然把driver公用的问题忘记了,即:每写一个测试类,执行过程中都会新建一个窗口,这样应该说是非常不专业的。 大概想了一个方法,虽然看起来也不怎么专业,但感觉能用就很开心了。 解决步骤:                1 创建一个获取获取driver的方法getDriver()                2 创建成员变量,将 getDriver()赋值

IDEA +maven git tomcat database数据库 调试 插件 log4j Spring junit

前言 idea优化配置、常规配置、配置maven、git、tomcat、database数据库、调试配置、插件配置、log4j配置、Spring配置等等,稍后一一更新! 优化配置(#item1 “item1”) 打开文件 :“idea – > bin – >idea64.exe.vmoptions” -Xms: 初始内存;-Xmx : 最大内存;-ReservedCodeCache

sort常用排序模式---------shell基础篇(三)

sort 排序命令使用 表达式意义sort -c test测试文件“test”是否已经经过排序,一般用处不大sort -k1 test.txt按照第1域对文件test.txt进行排序,日常可以用来对合并的日志文件进行时间排序sort -k1 -m log1.txt log2.txt按照第一域进行排序后合并输出到控制台,建议使用“>>” 将合并内容输出到另一个文件中sort -t / -k3 te

4-Springboot集成FLOWABLE之流程驳回

目录标题 演示地址效果功能后端代码补充 演示地址 效果 功能 默认驳回到上一节点 后端代码 flowable自带驳回功能, 在源码ProcessInstanceResource.class下已有该功能,不需要自己额外去写 @ApiOperation(value = "Change the state a process instance", tags = { "Pr

bimface开发实战-vue版

效果 演示地址 框架 bimface + vue3.0 代码地址 gitee地址 使用 yarn install yarn serve

bimface 模型集成-后端(java)上传、发起转换、获取转换状态

目录 前言后端架构流程存储表结构全局工具类先根据appid, appsecret 生成accesstoken, 保存到自己的存储服务器。利用保存的 accesstoken 上传模型发起转换获取转换状态根据bimface文件ID获取模型viewtoken, 获取到viewtoken就可以利用前端浏览模型或图纸了 前言 之前没有注意官方有个sdk,然后自己就实现了这么个逻辑。建议

关于百度map API for Android的mobile ak 102错误

一共有三个sha1值需要比对: 第一个是 sha1值是http://developer.baidu.com/map/sdkandev-14.htm 里面获得的sha1值(包括里面的cmd和界面的两种获取sha1值得方法) 第二个是 sha1值是打包好apk文件中META-INF 文件夹的CERT.RSA中的sha1值。http://bbs.lbsyun.baidu.com/vi

android SlidingDrawer左右滑动 上下滑动

android SlidingDrawer这个控件,目前我发现的移动方向是  从下到上滑动  或者 从右到左滑动! 1.从下到上滑动,只需要把标签slidingdrawer中的android:orientation="vertical" 其他不变即可  (但是有一点说明 就是 不知道怎么从  上到下  滑动) 2.从右到左滑动,只需要把标签slidingdrawer中的android:orie

AsyncTask类(Android)

这个计数器程序很简单,它在界面上有两个按钮Start和Stop。点击Start按钮时,便会创建一个CounterTask实例task,然后调用它的execute函数就可以在应用程序中启动一个子线程,并且通过调用这个CounterTask类的doInBackground函数来执行计数任务。在计数的过程中,会通过调用publishProgress函数来将中间结果传递到onProgressUpdate函