在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 再多幾個例子
combineLatest
從列表創(chuàng)建一個Observable
RxJava的與眾不同之處
Schedulers
RxJava觀察者模式工具包
總結(jié)
工具
你什么時候使用觀察者模式?
GroupBy
App架構(gòu)
組合Observables
創(chuàng)建Activity類
StartWith
RX - 從.NET到RxJava
處理耗時的任務(wù)
過濾Observables
向響應(yīng)式世界問好
避免阻塞I/O的操作
Join
有且僅有一次
Schedulers-解決Android主線程問題
轉(zhuǎn)換Observables
啟動引擎
我們的第一個Observable
總結(jié)
StrictMode
Debounce
*map家族
創(chuàng)建RecyclerView Adapter
為什么是Observables?
Merge
再多幾個例子
總結(jié)
Buffer
Window
總結(jié)
Timeout
執(zhí)行網(wǎng)絡(luò)任務(wù)
項目目標
來到Java世界 - Netflix RxJava
獲取我們需要的數(shù)據(jù)
Observable
過濾序列
非阻塞I/O操作
ZIP
總結(jié)
And,Then和When
觀察者模式
Retrofit
Cast
Skip and SkipLast
微軟響應(yīng)式擴展
與REST無縫結(jié)合-RxJava和Retrofit
First and last
RxJava Essentials 中文翻譯版
Switch
ElementAt
總結(jié)
總結(jié)
總結(jié)
Sampling
SubscribeOn and ObserveOn
Subject = Observable + Observer

再多幾個例子

在這一節(jié)中,我們將基于RxJava的just(),repeat(),defer(),range(),interval(),和timer()方法展示一些例子。

just()

假如我們只有3個獨立的AppInfo對象并且我們想把他們轉(zhuǎn)化為Observable并填充到RecyclerView的item中:

List<AppInfo> apps = ApplicationsList.getInstance().getList();

AppInfo appOne = apps.get(0);

AppInfo appTwo = apps.get(10);

AppInfo appThree = apps.get(24);

loadApps(appOne,appTwo,appThree);

我們可以像我們之前的例子那樣檢索列表并提取出這三個元素。然后我們將他們傳到這個loadApps()函數(shù)里面:

private void loadApps(AppInfo appOne,AppInfo appTwo,AppInfo appThree) {
    mRecyclerView.setVisibility(View.VISIBLE);
    Observable.just(appOne,appTwo,appThree)
            .subscribe(new Observer<AppInfo>() {

                @Override
                public void onCompleted() {
                    mSwipeRefreshLayout.setRefreshing(false);
                    Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onError(Throwable e) {
                    Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
                    mSwipeRefreshLayout.setRefreshing(false);
                }

                @Override
                public void onNext(AppInfo appInfo) {
                    mAddedApps.add(appInfo); 
                    mAdapter.addApplication(mAddedApps.size() - 1,appInfo);
                }
            });
}

正如你看到的,代碼和之前的例子很像。這種方法讓我們有機會來考慮一下代碼的復(fù)用。

你可以將一個函數(shù)作為參數(shù)傳給just()方法,你將會得到一個已存在代碼的原始Observable版本。在一個新的響應(yīng)式架構(gòu)的基礎(chǔ)上遷移已存在的代碼,這個方法可能是一個有用的開始點。

repeat()

假如你想對一個Observable重復(fù)發(fā)射三次數(shù)據(jù)。例如,我們用just()例子中的Observable:

private void loadApps(AppInfo appOne,AppInfo appTwo,AppInfo appThree) {
    mRecyclerView.setVisibility(View.VISIBLE);
    Observable.just(appOne,appTwo,appThree)
            .repeat(3)
            .subscribe(new Observer<AppInfo>() {

                @Override
                public void onCompleted() {
                    mSwipeRefreshLayout.setRefreshing(false);
                    Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onError(Throwable e) {
                    Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
                    mSwipeRefreshLayout.setRefreshing(false);
                }

                @Override
                public void onNext(AppInfo appInfo) {
                    mAddedApps.add(appInfo); 
                    mAdapter.addApplication(mAddedApps.size() - 1,appInfo);
                }
            });
}

正如你看到的,我們在just()創(chuàng)建Observable后追加了repeat(3),它將會創(chuàng)建9個元素的序列,每一個都單獨發(fā)射。

defer()

有這樣一個場景,你想在這聲明一個Observable但是你又想推遲這個Observable的創(chuàng)建直到觀察者訂閱時??聪旅娴?code>getInt()函數(shù):

private Observable<Integer> getInt(){
    return Observable.create(subscriber -> {
        if(subscriber.isUnsubscribed()){
            return;
        }
        App.L.debug("GETINT");
        subscriber.onNext(42);
        subscriber.onCompleted();
    });
}

這比較簡單,并且它沒有做太多事情,但是它正好為我們服務(wù)?,F(xiàn)在,我們可以創(chuàng)建一個新的Observable并且應(yīng)用defer():

Observable<Integer> deferred = Observable.defer(this::getInt);

這次,deferred存在,但是getInt() create()方法還沒有調(diào)用:logcat日志也沒有“GETINT”打印出來:

deferred.subscribe(number -> {
    App.L.debug(String.valueOf(number));
});

但是一旦我們訂閱了,create()方法就會被調(diào)用并且我們也可以在logcat日志中得到下賣弄兩個:GETINT和42。

range()

你需要從一個指定的數(shù)字X開始發(fā)射N個數(shù)字嗎?你可以用range:

Observable.range(10,3)
    .subscribe(new Observer<Integer>() {

        @Override
        public void onCompleted() {
            Toast.makeText(getActivity(), "Yeaaah!", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable e) {
            Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNext(Integer number) {
            Toast.makeText(getActivity(), "I say " + number, Toast.LENGTH_SHORT).show();
        }
    });

range()函數(shù)用兩個數(shù)字作為參數(shù):第一個是起始點,第二個是我們想發(fā)射數(shù)字的個數(shù)。

interval()

interval()函數(shù)在你需要創(chuàng)建一個輪詢程序時非常好用。

Subscription stopMePlease = Observable.interval(3,TimeUnit.SECONDS)
    .subscribe(new Observer<Integer>() {

        @Override
        public void onCompleted() {
            Toast.makeText(getActivity(), "Yeaaah!", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable e) {
            Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNext(Integer number) {
            Toast.makeText(getActivity(), "I say " + number, Toast.LENGTH_SHORT).show();
        }
    });

interval()函數(shù)的兩個參數(shù):一個指定兩次發(fā)射的時間間隔,另一個是用到的時間單位。

timer()

如果你需要一個一段時間之后才發(fā)射的Observable,你可以像下面的例子使用timer()

Observable.timer(3,TimeUnit.SECONDS)
    .subscribe(new Observer<Long>() {

        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long number) {
            Log.d("RXJAVA", "I say " + number);
        }
    });

它將3秒后發(fā)射0,然后就完成了。讓我們使用timer()的第三個參數(shù),就像下面的例子:

Observable.timer(3,3,TimeUnit.SECONDS)
    .subscribe(new Observer<Long>() {

        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long number) {
            Log.d("RXJAVA", "I say " + number);
        }
    });

用這個代碼,你可以創(chuàng)建一個以初始值來延遲(上一個例子是3秒)執(zhí)行的interval()版本,然后每隔N秒就發(fā)射一個新的數(shù)字(前面的例子是3秒)。

上一篇:Buffer下一篇:ZIP