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

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、