天天看點

RxJava2學習RxJava2學習

RxJava2學習

一、Eclipse Maven

Eclipse之jar包 maven位址:http://mvnrepository.com/artifact/io.reactivex.rxjava2/rxjava/2.1.7

二、操作符:教程(https://www.jianshu.com/u/c50b715ccaeb)

1. map

轉換資料類型,如上遊是整行,map轉化為String傳回,通過Map, 可以将上遊發來的事件轉換為任意的類型, 可以是一個Object, 也可以是一個集合

Observable.fromArray(,,)
        .map(new Function<Integer, String>() {

            public String apply(Integer t) throws Exception {
                // TODO Auto-generated method stub
                return "結果:"+t;
            }
        })
        .subscribe(new Consumer<String>() {

            public void accept(String t) throws Exception {
                // TODO Auto-generated method stub
                System.out.println(t);
            }
        });
           

2. FlatMap

flatMap将一個發送事件的上遊Observable變換為多個發送事件的Observables,然後将它們發射的事件合并後放進一個單獨的Observable裡.,都将建立一個新的水管,flatMap并不保證事件的順序

3. concatMap

它和flatMap的作用幾乎一模一樣, 隻是它的結果是嚴格按照上遊發送的順序來發送的

執行個體:注冊然後登入

api.register(new RegisterRequest())            //發起注冊請求
                .subscribeOn(Schedulers.io())               //在IO線程進行網絡請求
                .observeOn(AndroidSchedulers.mainThread())  //回到主線程去處理請求注冊結果
                .doOnNext(new Consumer<RegisterResponse>() {
                    @Override
                    public void accept(RegisterResponse registerResponse) throws Exception {
                        //先根據注冊的響應結果去做一些操作
                    }
                })
                .observeOn(Schedulers.io())                 //回到IO線程去發起登入請求
                .flatMap(new Function<RegisterResponse, ObservableSource<LoginResponse>>() {
                    @Override
                    public ObservableSource<LoginResponse> apply(RegisterResponse registerResponse) throws Exception {
                        return api.login(new LoginRequest());
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())  //回到主線程去處理請求登入的結果
                .subscribe(new Consumer<LoginResponse>() {
                    @Override
                    public void accept(LoginResponse loginResponse) throws Exception {
                        Toast.makeText(MainActivity.this, "登入成功", Toast.LENGTH_SHORT).show();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Toast.makeText(MainActivity.this, "登入失敗", Toast.LENGTH_SHORT).show();
                    }
                });

           

4.zip

https://www.jianshu.com/p/bb58571cdb64

通過一個函數将多個Observable發送的事件結合到一起,然後發送這些組合到一起的事件. 它按照嚴格的順序應用這個函數。它隻發射與發射資料項最少的那個Observable一樣多的資料。

Observable.zip(Observable.fromArray(,,),Observable.fromArray("A","B","C"),new BiFunction<Integer, String, String>() {

            public String apply(Integer t1, String t2) throws Exception {
                return t1+t2;
            }
        })
        .subscribe(new Consumer<String>() {

            public void accept(String t) throws Exception {
                System.out.println(t);
            }
        });
           

輸入結果:1A 2B 3C