├── .gitignore
├── .idea
├── .name
├── compiler.xml
├── copyright
│ └── profiles_settings.xml
├── dictionaries
│ └── Administrator.xml
├── encodings.xml
├── findbugs-idea.xml
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── README.md
├── RxJavaDemo.iml
├── app
├── .gitignore
├── app.iml
├── build.gradle
├── libs
│ ├── rxandroid-1.2.1.aar
│ └── rxjava-1.3.0.jar
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── cn
│ │ └── com
│ │ └── chaoba
│ │ └── rxjavademo
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── cn
│ │ │ └── com
│ │ │ └── chaoba
│ │ │ └── rxjavademo
│ │ │ ├── BaseActivity.java
│ │ │ ├── Filtering
│ │ │ ├── DebounceActivity.java
│ │ │ ├── DistinctActivity.java
│ │ │ ├── ElementAtAndFilterActivity.java
│ │ │ ├── FirstActivity.java
│ │ │ ├── SampleActivity.java
│ │ │ └── SkipAndTakeActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── aggregate
│ │ │ ├── ConcatAndCountActivity.java
│ │ │ └── Reducectivity.java
│ │ │ ├── combining
│ │ │ ├── CombineLatestActivity.java
│ │ │ ├── JoinActivity.java
│ │ │ ├── MergeActivity.java
│ │ │ ├── StartWithAndSwitchActivity.java
│ │ │ └── ZipActivity.java
│ │ │ ├── conditional_boolean
│ │ │ ├── AllAndAmbActivity.java
│ │ │ ├── ContainsActivity.java
│ │ │ ├── DefaultIfEmptyActivity.java
│ │ │ ├── SequenceEqualActivity.java
│ │ │ ├── SkipUntilSkipWhileActivity.java
│ │ │ └── TakeUntilTakeWhileActivity.java
│ │ │ ├── connectable
│ │ │ ├── PublishAndConnectActivity.java
│ │ │ ├── RefCountActivity.java
│ │ │ └── ReplayActivity.java
│ │ │ ├── creatingobserver
│ │ │ ├── CompletableActivity.java
│ │ │ ├── CreateAndRangeActivity.java
│ │ │ ├── DeferAndJustActivity.java
│ │ │ ├── FromActivity.java
│ │ │ ├── IntervalActivity.java
│ │ │ ├── RepeatAndTimerActivity.java
│ │ │ └── SingleActivity.java
│ │ │ ├── custom
│ │ │ └── CustomActivity.java
│ │ │ ├── errorhandling
│ │ │ ├── OnErrorActivity.java
│ │ │ ├── OnExceptionActivity.java
│ │ │ └── RetryActivity.java
│ │ │ ├── scheduler
│ │ │ ├── FromExecutorActivity.java
│ │ │ └── SubscribeOnAndObserveOnActivity.java
│ │ │ ├── transforming
│ │ │ ├── BufferActivity.java
│ │ │ ├── FlatMapActivity.java
│ │ │ ├── GroupbyActivity.java
│ │ │ ├── MapAndCastActivity.java
│ │ │ ├── ScanActivity.java
│ │ │ └── WindowActivity.java
│ │ │ └── utility
│ │ │ ├── DelayActivity.java
│ │ │ ├── DoActivity.java
│ │ │ ├── MaterializeActivity.java
│ │ │ ├── TimeIntervalTimeStampActivity.java
│ │ │ ├── TimeoutActivity.java
│ │ │ └── UsingActivity.java
│ └── res
│ │ ├── layout
│ │ ├── activity_base.xml
│ │ ├── activity_buffer.xml
│ │ ├── activity_debounce.xml
│ │ ├── activity_defer.xml
│ │ ├── activity_distinct.xml
│ │ ├── activity_element_at_and_first.xml
│ │ ├── activity_fitst.xml
│ │ ├── activity_flat_map.xml
│ │ ├── activity_from.xml
│ │ ├── activity_groupby.xml
│ │ ├── activity_interval.xml
│ │ ├── activity_main.xml
│ │ ├── activity_map.xml
│ │ ├── activity_publish_and_connect.xml
│ │ ├── activity_repeat.xml
│ │ ├── activity_sample.xml
│ │ ├── activity_scan.xml
│ │ ├── activity_skip_and_take.xml
│ │ ├── activity_window.xml
│ │ └── create.xml
│ │ ├── menu
│ │ ├── menu_base.xml
│ │ ├── menu_buffer.xml
│ │ ├── menu_create.xml
│ │ ├── menu_debounce.xml
│ │ ├── menu_defer.xml
│ │ ├── menu_distinct.xml
│ │ ├── menu_element_at_and_first.xml
│ │ ├── menu_fitst.xml
│ │ ├── menu_flat_map.xml
│ │ ├── menu_from.xml
│ │ ├── menu_groupby.xml
│ │ ├── menu_interval.xml
│ │ ├── menu_main.xml
│ │ ├── menu_map.xml
│ │ ├── menu_repeat.xml
│ │ ├── menu_sample.xml
│ │ ├── menu_scan.xml
│ │ ├── menu_skip_and_take.xml
│ │ └── menu_window.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-v21
│ │ └── styles.xml
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── cn
│ └── com
│ └── chaoba
│ └── rxjavademo
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | /local.properties
3 | /.idea/workspace.xml
4 | /.idea/libraries
5 | .DS_Store
6 | /build
7 | /captures
8 | /.idea
9 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | RxJavaDemo
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/dictionaries/Administrator.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/findbugs-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
32 |
203 |
216 |
225 |
226 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RxJavaDemo
2 |
3 | Demos for the useage of Rxjava operators in android app.
4 |
5 | Source for [my blogs](http://mushuichuan.com/tags/RxJava/) about Rxjava operators.
6 |
7 |
--------------------------------------------------------------------------------
/RxJavaDemo.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
38 |
39 |
40 |
209 |
210 |
211 |
222 |
223 |
224 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 |
4 | android {
5 | compileSdkVersion 23
6 | buildToolsVersion '25.0.0'
7 | compileOptions {
8 | sourceCompatibility JavaVersion.VERSION_1_8
9 | targetCompatibility JavaVersion.VERSION_1_8
10 | }
11 | defaultConfig {
12 | applicationId "cn.com.chaoba.rxjavademo"
13 | minSdkVersion 15
14 | targetSdkVersion 23
15 | versionCode 1
16 | versionName "1.0"
17 | jackOptions {
18 | enabled true
19 | }
20 | }
21 | buildTypes {
22 | release {
23 | minifyEnabled false
24 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
25 | }
26 | }
27 | compileOptions {
28 | sourceCompatibility JavaVersion.VERSION_1_8
29 | targetCompatibility JavaVersion.VERSION_1_8
30 | }
31 | }
32 | repositories {
33 | flatDir {
34 | dirs 'libs'
35 | }
36 | }
37 | dependencies {
38 | compile fileTree(include: ['*.jar'], dir: 'libs')
39 | compile 'com.android.support:appcompat-v7:23.0.0'
40 | compile(name:'rxandroid-1.2.1', ext:'aar')
41 | // compile 'io.reactivex:rxjava:1.2.2'
42 | // compile('io.reactivex:rxandroid:1.2.1')
43 | // {
44 | // exclude module: 'rxjava'
45 | // }
46 | }
47 |
--------------------------------------------------------------------------------
/app/libs/rxandroid-1.2.1.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Chaoba/RxJavaDemo/d5fd64876bb9472c811e65fabf648be9dcc8d4d2/app/libs/rxandroid-1.2.1.aar
--------------------------------------------------------------------------------
/app/libs/rxjava-1.3.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Chaoba/RxJavaDemo/d5fd64876bb9472c811e65fabf648be9dcc8d4d2/app/libs/rxjava-1.3.0.jar
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\software\adt-bundle-windows-x86-20130917\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/cn/com/chaoba/rxjavademo/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/BaseActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo;
2 |
3 | import android.os.Bundle;
4 | import android.support.v7.app.AppCompatActivity;
5 | import android.util.Log;
6 | import android.widget.Button;
7 | import android.widget.TextView;
8 |
9 | import rx.Observable;
10 | import rx.android.schedulers.AndroidSchedulers;
11 |
12 | public class BaseActivity extends AppCompatActivity {
13 |
14 | protected Button mLButton, mRButton;
15 | protected TextView mResultView;
16 | protected String TAG;
17 |
18 | @Override
19 | protected void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | setContentView(R.layout.activity_base);
22 | mLButton = (Button) findViewById(R.id.left);
23 | mRButton = (Button) findViewById(R.id.right);
24 | mResultView = (TextView) findViewById(R.id.result);
25 | TAG = getLocalClassName();
26 | }
27 |
28 | protected void log(Object s) {
29 | Log.i(TAG, String.valueOf(s));
30 | Observable.just(s).observeOn(AndroidSchedulers.mainThread()).subscribe(i -> {
31 | mResultView.setText(mResultView.getText() + "\n" + i);
32 | });
33 |
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/Filtering/DebounceActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo.filtering;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 |
6 | import java.util.concurrent.TimeUnit;
7 |
8 | import cn.com.chaoba.rxjavademo.BaseActivity;
9 | import rx.Observable;
10 | import rx.Subscriber;
11 | import rx.functions.Action1;
12 | import rx.functions.Func1;
13 | import rx.schedulers.Schedulers;
14 |
15 | public class DebounceActivity extends BaseActivity {
16 |
17 | @Override
18 | protected void onCreate(Bundle savedInstanceState) {
19 | super.onCreate(savedInstanceState);
20 | mLButton.setText("throttleWithTimeout");
21 | mLButton.setOnClickListener(new View.OnClickListener() {
22 | @Override
23 | public void onClick(View v) {
24 | throttleWithTimeoutObserver().subscribe(new Action1() {
25 | @Override
26 | public void call(Integer i) {
27 | log("throttleWithTimeout:" + i);
28 | }
29 | });
30 | }
31 | });
32 |
33 | mRButton.setText("debounce");
34 | mRButton.setOnClickListener(new View.OnClickListener() {
35 | @Override
36 | public void onClick(View v) {
37 | debounceObserver().subscribe(new Action1() {
38 | @Override
39 | public void call(Long i) {
40 | log("debounce:" + i);
41 | }
42 | });
43 | }
44 | });
45 |
46 |
47 | }
48 |
49 | private Observable debounceObserver() {
50 | return Observable.interval(1000, TimeUnit.MILLISECONDS)
51 | .debounce(new Func1>() {
52 | @Override
53 | public Observable call(Long aLong) {
54 | return Observable.timer(aLong % 2 * 1500, TimeUnit.MILLISECONDS);
55 | }
56 | });
57 | }
58 |
59 | private Observable throttleWithTimeoutObserver() {
60 | return createObserver().throttleWithTimeout(200, TimeUnit.MILLISECONDS);
61 |
62 | }
63 |
64 | private Observable createObserver() {
65 | return Observable.create(new Observable.OnSubscribe() {
66 | @Override
67 | public void call(Subscriber super Integer> subscriber) {
68 | for (int i = 0; i < 10; i++) {
69 | if (!subscriber.isUnsubscribed()) {
70 | subscriber.onNext(i);
71 | }
72 | int sleep = 100;
73 | if (i % 3 == 0) {
74 | sleep = 300;
75 | }
76 | try {
77 | Thread.sleep(sleep);
78 | } catch (InterruptedException e) {
79 | e.printStackTrace();
80 | }
81 |
82 | }
83 | subscriber.onCompleted();
84 | }
85 | }).subscribeOn(Schedulers.computation());
86 | }
87 | }
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/Filtering/DistinctActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo.filtering;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 |
6 | import cn.com.chaoba.rxjavademo.BaseActivity;
7 | import rx.Observable;
8 | import rx.functions.Action1;
9 |
10 | public class DistinctActivity extends BaseActivity {
11 |
12 | @Override
13 | protected void onCreate(Bundle savedInstanceState) {
14 | super.onCreate(savedInstanceState);
15 | mLButton.setText("distinct");
16 | mLButton.setOnClickListener(new View.OnClickListener() {
17 | @Override
18 | public void onClick(View v) {
19 | distinctObserver().subscribe(new Action1() {
20 | @Override
21 | public void call(Integer i) {
22 | log("distinct:" + i);
23 | }
24 | });
25 | }
26 | });
27 | mRButton.setText("UntilChanged");
28 | mRButton.setOnClickListener(new View.OnClickListener() {
29 | @Override
30 | public void onClick(View v) {
31 | distinctUntilChangedObserver().subscribe(new Action1() {
32 | @Override
33 | public void call(Integer i) {
34 | log("UntilChanged:" + i);
35 | }
36 | });
37 | }
38 | });
39 | }
40 |
41 | private Observable distinctObserver() {
42 | return Observable.just(1, 2, 3, 4, 5, 4, 3, 2, 1).distinct();
43 |
44 | }
45 |
46 | private Observable distinctUntilChangedObserver() {
47 | return Observable.just(1, 2, 3, 3, 3, 1, 2, 3, 3).distinctUntilChanged();
48 |
49 | }
50 |
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/Filtering/ElementAtAndFilterActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo.filtering;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 |
6 | import cn.com.chaoba.rxjavademo.BaseActivity;
7 | import rx.Observable;
8 | import rx.functions.Action1;
9 | import rx.functions.Func1;
10 |
11 | public class ElementAtAndFilterActivity extends BaseActivity {
12 |
13 | @Override
14 | protected void onCreate(Bundle savedInstanceState) {
15 | super.onCreate(savedInstanceState);
16 | mLButton.setText("elementAt");
17 | mLButton.setOnClickListener(new View.OnClickListener() {
18 | @Override
19 | public void onClick(View v) {
20 | elementAtObserver().subscribe(new Action1() {
21 | @Override
22 | public void call(Integer i) {
23 | log("elementAt:" + i);
24 | }
25 | });
26 | }
27 | });
28 | mRButton.setText("Filter");
29 | mRButton.setOnClickListener(new View.OnClickListener() {
30 | @Override
31 | public void onClick(View v) {
32 | filterObserver().subscribe(new Action1() {
33 | @Override
34 | public void call(Integer i) {
35 | log("Filter:" + i);
36 | }
37 | });
38 | }
39 | });
40 | }
41 |
42 | private Observable elementAtObserver() {
43 | return Observable.just(0, 1, 2, 3, 4, 5).elementAt(2);
44 | }
45 |
46 | private Observable filterObserver() {
47 | return Observable.just(0, 1, 2, 3, 4, 5).filter(new Func1() {
48 | @Override
49 | public Boolean call(Integer integer) {
50 | return integer < 3;
51 | }
52 | });
53 | }
54 |
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/Filtering/FirstActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo.filtering;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 |
6 | import cn.com.chaoba.rxjavademo.BaseActivity;
7 | import rx.Observable;
8 | import rx.functions.Action1;
9 | import rx.functions.Func1;
10 |
11 | public class FirstActivity extends BaseActivity {
12 |
13 | @Override
14 | protected void onCreate(Bundle savedInstanceState) {
15 | super.onCreate(savedInstanceState);
16 | mLButton.setText("First");
17 | mLButton.setOnClickListener(
18 | new View.OnClickListener() {
19 | @Override
20 | public void onClick(View v) {
21 | Observable.just(0, 1, 2, 3, 4, 5).first(new Func1() {
22 | @Override
23 | public Boolean call(Integer integer) {
24 | return integer > 3;
25 | }
26 | }).subscribe(new Action1() {
27 | @Override
28 | public void call(Integer i) {
29 | log("First:" + i);
30 | }
31 | });
32 | }
33 | });
34 |
35 |
36 | mRButton.setText("Blocking");
37 | mRButton.setOnClickListener(new View.OnClickListener() {
38 | @Override
39 | public void onClick(View v) {
40 | int result = Observable.just(0, 1, 2, 3, 4, 5)
41 | .toBlocking()
42 | .first(new Func1() {
43 | @Override
44 | public Boolean call(Integer i) {
45 | return i > 1;
46 | }
47 | });
48 | log("blocking:" + result);
49 | }
50 | });
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/Filtering/SampleActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo.filtering;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 |
6 | import java.util.concurrent.TimeUnit;
7 |
8 | import cn.com.chaoba.rxjavademo.BaseActivity;
9 | import rx.Observable;
10 | import rx.functions.Action1;
11 |
12 | public class SampleActivity extends BaseActivity {
13 |
14 | @Override
15 | protected void onCreate(Bundle savedInstanceState) {
16 | super.onCreate(savedInstanceState);
17 | mLButton.setText("sample");
18 | mLButton.setOnClickListener(new View.OnClickListener() {
19 | @Override
20 | public void onClick(View v) {
21 | sampleObserver().subscribe(new Action1() {
22 | @Override
23 | public void call(Long i) {
24 | log("sample:" + i);
25 | }
26 | });
27 | }
28 | });
29 | mRButton.setText("throttleFirst");
30 | mRButton.setOnClickListener(new View.OnClickListener() {
31 | @Override
32 | public void onClick(View v) {
33 | throttleFirstObserver().subscribe(new Action1() {
34 | @Override
35 | public void call(Long i) {
36 | log("throttleFirst:" + i);
37 | }
38 | });
39 | }
40 | });
41 | }
42 |
43 | private Observable sampleObserver() {
44 | return Observable.interval(200, TimeUnit.MILLISECONDS)
45 | .sample(1000, TimeUnit.MILLISECONDS);
46 | }
47 |
48 | private Observable throttleFirstObserver() {
49 | return Observable.interval(200, TimeUnit.MILLISECONDS)
50 | .throttleFirst(1000, TimeUnit.MILLISECONDS);
51 | }
52 |
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/Filtering/SkipAndTakeActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo.filtering;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 |
6 | import cn.com.chaoba.rxjavademo.BaseActivity;
7 | import rx.Observable;
8 | import rx.functions.Action1;
9 |
10 | public class SkipAndTakeActivity extends BaseActivity {
11 |
12 | @Override
13 | protected void onCreate(Bundle savedInstanceState) {
14 | super.onCreate(savedInstanceState);
15 | mLButton.setText("Skip");
16 | mLButton.setOnClickListener(new View.OnClickListener() {
17 | @Override
18 | public void onClick(View v) {
19 | skipObserver().subscribe(new Action1() {
20 | @Override
21 | public void call(Integer i) {
22 | log("Skip:" + i);
23 | }
24 | });
25 | }
26 | });
27 | mRButton.setText("Take");
28 | mRButton.setOnClickListener(new View.OnClickListener() {
29 | @Override
30 | public void onClick(View v) {
31 | takeObserver().subscribe(new Action1() {
32 | @Override
33 | public void call(Integer i) {
34 | log("Take:" + i);
35 | }
36 | });
37 | }
38 | });
39 | }
40 |
41 | private Observable skipObserver() {
42 | return Observable.just(0, 1, 2, 3, 4, 5).skip(2);
43 | }
44 |
45 | private Observable takeObserver() {
46 | return Observable.just(0, 1, 2, 3, 4, 5).take(2);
47 | }
48 |
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/com/chaoba/rxjavademo/MainActivity.java:
--------------------------------------------------------------------------------
1 | package cn.com.chaoba.rxjavademo;
2 |
3 | import android.app.ListActivity;
4 | import android.content.Intent;
5 | import android.content.pm.PackageManager;
6 | import android.content.pm.ResolveInfo;
7 | import android.os.Bundle;
8 | import android.text.TextUtils;
9 | import android.view.View;
10 | import android.widget.ListView;
11 | import android.widget.SimpleAdapter;
12 |
13 | import java.text.Collator;
14 | import java.util.ArrayList;
15 | import java.util.Collections;
16 | import java.util.Comparator;
17 | import java.util.HashMap;
18 | import java.util.List;
19 | import java.util.Map;
20 |
21 | public class MainActivity extends ListActivity {
22 | private final String CATERGORY = "cn.com.chaoba.rxjavademo.category";
23 |
24 | public void onCreate(Bundle savedInstanceState) {
25 | super.onCreate(savedInstanceState);
26 |
27 | Intent intent = getIntent();
28 | String path = intent.getStringExtra(CATERGORY);
29 |
30 | if (path == null) {
31 | path = "";
32 | }
33 |
34 | setListAdapter(new SimpleAdapter(this, getData(path),
35 | android.R.layout.simple_list_item_1, new String[]{"title"},
36 | new int[]{android.R.id.text1}));
37 | getListView().setTextFilterEnabled(true);
38 | }
39 |
40 | protected List