zoukankan      html  css  js  c++  java
  • 在android 上 使用 rxjava 入门篇

    什么是 rxJava?

    RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

    简单来说,rxJava 是一种 基于事件的,使用了可被观察序列 的异步 响应 扩展 的类库。

    这句话有这几个意思:

      rxJava 是解决 异步问题的。

      rxJava 是基于事件机制的。

      rxJava 是处理响应扩展的,解决 事件的响应问题(比如事件的响应在哪个线程?)。

      rxJava 是序列的。它是个有顺序的队列,按顺序的,先进后出的。它对集合对象的支持很好。 

    rxJava 使用了 设计模式里的 观察者模式 来实现。

    引用类库

       compile 'io.reactivex:rxjava:1.0.14'
        compile 'io.reactivex:rxandroid:1.0.1'

    代码里如何使用

    rxJava的代码长这样:

    Observable.from(userBeans)
                    .map(new Func1<UserBean, String>() {
                        @Override
                        public String call(UserBean userBean) {
                  
                            return String.format("%s(%s)", userBean.name, userBean.age);
                        }
                    })
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Action1<String>() {
                        @Override
                        public void call(String str) {
                           
                            alert(str);
                        }
                    });

    这段代码告诉了我们: 

      Observable.from ()  创建了一个被观察的对象。

      .map() 方法执行了转换,将对象转成字符串

      .subscribeOn() 指示了 在哪个线程里执行 上面的转换操作。

      .observeOn() 指示了 在哪个线程里执行 对结果的响应操作,比如后面的 alert 方法。

      .subscribe() 传递了具体的响应处理,即执行了 alert方法。

    代码很优雅,链式的写法,很清晰的表达了代码的行为。

    从单个对象创建被观察对象的演示

    使用 just() 方法,指定单个对象来创建被观察对象实例。

        private void doSomeOne() {
            Observable.just("Hello, world!").subscribe(new Action1<String>() {
                @Override
                public void call(String str) {
                    alert(str);
                }
            });
        }

    从一个集合创建被观察对象的演示

    使用 from() 方法,指定一个集合来创建被观察对象实例。

        private void doSomeArray() {
            Observable.from(new String[]{"A", "B", "C"}).subscribe(new Action1<String>() {
                @Override
                public void call(String str) {
                    alert(str);
                }
            });
        }

    对象转换的演示

    我们使用 map() 方法进行转换。下面的代码演示了 从 UserBean数组创建被观察对象,然后使用map()方法转换成 字符串。

        private void doSomeEntity() {
            UserBean[] userBeans = new UserBean[3];
            userBeans[0] = new UserBean("jo", 18);
            userBeans[1] = new UserBean("ken", 9);
            userBeans[2] = new UserBean("hack", 30);
    
            //增加了map方法,转出 实体到字符串
            Observable.from(userBeans).map(new Func1<UserBean, String>() {
                @Override
                public String call(UserBean userBean) {
                    return String.format("%s(%s)", userBean.name, userBean.age);
                }
            }).subscribe(new Action1<String>() {
                @Override
                public void call(String str) {
                    alert(str);
                }
            });
        }

    参考:

    https://github.com/ReactiveX/RxJava

    http://gank.io/post/560e15be2dca930e00da1083

  • 相关阅读:
    MBG逆向工程报错:generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver
    抽取的文件上传类如果注入到容器中??
    使用阿里云OSS,上传图片时报错:java.lang.ClassNotFoundException:org.apache.http.ssl.TrustStrategy
    如何在Eclipse下查看JDK源代码
    mvc架构
    eclipse各版本介绍
    关于mysql MYISAM引擎的锁问题
    忘记mysq rootl密码
    mysql主从
    tomcat启动报错No UserDatabase component found under key UserDatabase
  • 原文地址:https://www.cnblogs.com/vir56k/p/5473977.html
Copyright © 2011-2022 走看看