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

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

再多幾個(gè)例子

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

just()

假如我們只有3個(gè)獨(dú)立的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);

我們可以像我們之前的例子那樣檢索列表并提取出這三個(gè)元素。然后我們將他們傳到這個(gè)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);
                }
            });
}

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

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

repeat()

假如你想對一個(gè)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),它將會(huì)創(chuàng)建9個(gè)元素的序列,每一個(gè)都單獨(dú)發(fā)射。

defer()

有這樣一個(gè)場景,你想在這聲明一個(gè)Observable但是你又想推遲這個(gè)Observable的創(chuàng)建直到觀察者訂閱時(shí)??聪旅娴?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)建一個(gè)新的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()方法就會(huì)被調(diào)用并且我們也可以在logcat日志中得到下賣弄兩個(gè):GETINT和42。

range()

你需要從一個(gè)指定的數(shù)字X開始發(fā)射N個(gè)數(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ù)用兩個(gè)數(shù)字作為參數(shù):第一個(gè)是起始點(diǎn),第二個(gè)是我們想發(fā)射數(shù)字的個(gè)數(shù)。

interval()

interval()函數(shù)在你需要?jiǎng)?chuàng)建一個(gè)輪詢程序時(shí)非常好用。

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ù)的兩個(gè)參數(shù):一個(gè)指定兩次發(fā)射的時(shí)間間隔,另一個(gè)是用到的時(shí)間單位。

timer()

如果你需要一個(gè)一段時(shí)間之后才發(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()的第三個(gè)參數(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);
        }
    });

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

上一篇:Buffer下一篇:ZIP