RxJava+RxAndroid 初学者一看一敲就懂

2024-05-08 22:32

本文主要是介绍RxJava+RxAndroid 初学者一看一敲就懂,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!


每日一言:自信的生命最美丽。

使用

1、关联

compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.trello:rxlifecycle:0.3.1'
compile 'com.trello:rxlifecycle-components:0.3.1'

2、简单示例(一定自己敲一遍)

String tag = "=====>:";

public void test01() {Log.e(tag, "------------test01-----------" +"\n----------简单实例01---------");

    //创建被观察者
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {@Override
        public void call(Subscriber<? super String> subscriber) {//调用观察者的回调
            subscriber.onNext("我是");
            subscriber.onNext("RxJava");
            subscriber.onNext("简单示例");
            subscriber.onError(new Throwable("出错了"));
            subscriber.onCompleted();
        }});

    //创建观察者
    Observer<String> observer = new Observer<String>() {@Override
        public void onCompleted() {Log.e(tag, "onCompleted");
        }@Override
        public void onError(Throwable e) {Log.e(tag, e.getMessage());
        }@Override
        public void onNext(String s) {Log.e(tag, s);
        }};

    //注册,是的观察者和被观察者关联,将会触发OnSubscribe.call方法
    observable.subscribe(observer);
}public void test02() {//创建被观察者
    final Observable<String> observable=Observable.create(new Observable.OnSubscribe<String>(){@Override
        public void call(Subscriber<? super String> subscriber) {//调用观察者的回调
            subscriber.onNext("我是");
            subscriber.onNext("RxJava");
            subscriber.onNext("简单实例02");
            subscriber.onCompleted();
            subscriber.onError(new Throwable("出错了"));
        }});
    //创建观察者
    Subscriber<String> subscriber=new Subscriber<String>() {@Override
        public void onStart() {Log.e(tag,"onStart");
        }@Override
        public void onCompleted() {Log.e(tag,"onCompleted");
        }@Override
        public void onError(Throwable e) {Log.e(tag,e.getMessage());
        }@Override
        public void onNext(String s) {Log.e(tag,s);
        }};
    //注册,是的观察者和被观察者关联,将会触发OnSubscribe.call方法
    observable.subscribe(subscriber);

}
public void test03(){String[] ints={"1","2","3","4"};
    Observable.from(ints).subscribe(new Subscriber<String>() {@Override
        public void onCompleted() {Log.e(tag,"onCompleted");
        }@Override
        public void onError(Throwable e) {Log.e(tag,e.getMessage());
        }@Override
        public void onNext(String s) {Log.e(tag,s);
        }});
}
public void test04(){Observable.just(1,2,3,4,2).subscribe(new Subscriber<Integer>() {@Override
        public void onCompleted() {Log.e(tag,"onCompleted");
        }@Override
        public void onError(Throwable e) {Log.e(tag,e.getMessage());
        }@Override
        public void onNext(Integer integer) {Log.e(tag,integer+"");
        }});
}
public void test06(){Log.e(tag, "------------test06-----------" +"\n----------线程调度---------");
    //从网络上根据用户id,请求对应用户,并显示用户积分到界面
    Observable.create(new Observable.OnSubscribe<Integer>() {@Override
        public void call(Subscriber<? super Integer> subscriber) {int id=111;
            UserInfo userinfo=getUserInfoFromNet(id);
            subscriber.onNext(userinfo.points);
        }}).subscribeOn(Schedulers.io())//事件产生在io线程
            .observeOn(AndroidSchedulers.mainThread())//消耗事件在主线程
            .subscribe(new Action1<Integer>() {@Override
                public void call(Integer points) {Log.e(tag, "显示用户积分:" + points);
                }});
}
//模拟从网络请求
private UserInfo getUserInfoFromNet(int id) {UserInfo userInfo = new UserInfo();
    userInfo.points=100;
    return userInfo;
}
public class UserInfo{public int id;
    public int points;
}
public void test10(){Log.e(tag, "------------test10-----------" +"\n----------操作符---------");
    String[] strs={"aa","bb","bb","cc","dd","ee"};
    Observable<String> observable = Observable.from(strs);
    //filter(Func1)方法来过滤我们观测序列中不想要的值
    //take(count)方法来限制获取多少个数据
    Log.e(tag,"---------filter & take----------");
    observable.filter(new Func1<String, Boolean>() {@Override
                public Boolean call(String s) {//把已b结尾的数据去掉
                    return !s.endsWith("b");
                }}).take(3)//取3个数据
            .subscribe(new Action1<String>() {@Override
                public void call(String s) {Log.e(tag,s);
                }});
    Log.e(tag,"---------skip & first----------");
    observable.skip(3).first().subscribe(new Action1<String>() {@Override
                public void call(String s) {Log.e(tag,s);
                }});
}

感谢果风兄弟的支持和指导

这篇关于RxJava+RxAndroid 初学者一看一敲就懂的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏