Skip to content

Commit 0a7cf5a

Browse files
committed
review finish 75%
1 parent 0401e5a commit 0a7cf5a

File tree

18 files changed

+984
-560
lines changed

18 files changed

+984
-560
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,22 @@
1111
android:roundIcon="@mipmap/ic_launcher_round"
1212
android:supportsRtl="true"
1313
android:theme="@style/AppTheme">
14-
<activity android:name=".functionUsage_Demo.RxJavafixRetrofit2">
14+
<activity android:name=".FunctionOperator.RxJavafixRetrofit2">
1515
<intent-filter>
1616
<action android:name="android.intent.action.MAIN" />
1717

1818
<category android:name="android.intent.category.LAUNCHER" />
1919
</intent-filter>
2020
</activity>
2121

22-
<activity android:name=".establishUsage_Demo.establishUsage">
22+
<activity android:name=".EstablishOperator.establishUsage">
2323
</activity>
24-
<activity android:name=".establishUsage_Demo.实战系列.RxJavafixRxjava">
25-
</activity>
26-
<activity android:name=".CombineUsage">
24+
<activity android:name=".EstablishOperator.Demo.RxJavafixRxjava">
2725
</activity>
2826

2927
<activity android:name=".FilterUsage">
3028
</activity>
31-
<activity android:name=".functionUsage_Demo.RxJavafixRetrofit">
29+
<activity android:name=".FunctionOperator.RxJavafixRetrofit">
3230
</activity>
3331

3432
<activity android:name=".MainActivity">
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package scut.carson_ho.rxjava_operators.CombineOperator;
2+
3+
import android.os.Bundle;
4+
import android.support.v7.app.AppCompatActivity;
5+
import android.util.Log;
6+
7+
import io.reactivex.Observable;
8+
import io.reactivex.ObservableEmitter;
9+
import io.reactivex.ObservableOnSubscribe;
10+
import io.reactivex.functions.Consumer;
11+
import scut.carson_ho.rxjava_operators.R;
12+
13+
/**
14+
* Created by Carson_Ho on 17/9/12.
15+
* 从磁盘 / 内存缓存中 获取缓存数据
16+
*/
17+
18+
public class UsageDemo1 extends AppCompatActivity {
19+
// 该2变量用于模拟内存缓存 & 磁盘缓存中的数据
20+
String memoryCache = null;
21+
String diskCache = "从磁盘缓存中获取数据";
22+
23+
private String TAG = "RxJava";
24+
25+
@Override
26+
protected void onCreate(Bundle savedInstanceState) {
27+
super.onCreate(savedInstanceState);
28+
setContentView(R.layout.activity_combine);
29+
30+
31+
/*
32+
* 设置第1个Observable:检查内存缓存是否有该数据的缓存
33+
**/
34+
Observable<String> memory = Observable.create(new ObservableOnSubscribe<String>() {
35+
@Override
36+
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
37+
38+
// 先判断内存缓存有无数据
39+
if (memoryCache != null) {
40+
// 若有该数据,则发送
41+
emitter.onNext(memoryCache);
42+
} else {
43+
// 若无该数据,则直接发送结束事件
44+
emitter.onComplete();
45+
}
46+
47+
}
48+
});
49+
50+
/*
51+
* 设置第2个Observable:检查磁盘缓存是否有该数据的缓存
52+
**/
53+
Observable<String> disk = Observable.create(new ObservableOnSubscribe<String>() {
54+
@Override
55+
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
56+
57+
// 先判断磁盘缓存有无数据
58+
if (diskCache != null) {
59+
// 若有该数据,则发送
60+
emitter.onNext(diskCache);
61+
} else {
62+
// 若无该数据,则直接发送结束事件
63+
emitter.onComplete();
64+
}
65+
66+
}
67+
});
68+
69+
/*
70+
* 设置第3个Observable:通过网络获取数据
71+
**/
72+
Observable<String> network = Observable.just("从网络中获取数据");
73+
// 此处仅作网络请求的模拟
74+
75+
76+
/*
77+
* 通过concat() 和 firstElement()操作符实现缓存功能
78+
**/
79+
80+
// 1. 通过concat()合并memory、disk、network 3个被观察者的事件(即检查内存缓存、磁盘缓存 & 发送网络请求)
81+
// 并将它们按顺序串联成队列
82+
Observable.concat(memory, disk, network)
83+
// 2. 通过firstElement(),从串联队列中取出并发送第1个有效事件(Next事件),即依次判断检查memory、disk、network
84+
.firstElement()
85+
// 即本例的逻辑为:
86+
// a. firstElement()取出第1个事件 = memory,即先判断内存缓存中有无数据缓存;由于memoryCache = null,即内存缓存中无数据,所以发送结束事件(视为无效事件)
87+
// b. firstElement()继续取出第2个事件 = disk,即判断磁盘缓存中有无数据缓存:由于diskCache ≠ null,即磁盘缓存中有数据,所以发送Next事件(有效事件)
88+
// c. 即firstElement()已发出第1个有效事件(disk事件),所以停止判断。
89+
90+
// 3. 观察者订阅
91+
.subscribe(new Consumer<String>() {
92+
@Override
93+
public void accept( String s) throws Exception {
94+
Log.d(TAG,"最终获取的数据来源 = "+ s);
95+
}
96+
});
97+
}
98+
}
99+
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package scut.carson_ho.rxjava_operators.CombineOperator;
2+
3+
import android.os.Bundle;
4+
import android.support.v7.app.AppCompatActivity;
5+
import android.util.Log;
6+
7+
import io.reactivex.Observable;
8+
import io.reactivex.Observer;
9+
import io.reactivex.disposables.Disposable;
10+
import scut.carson_ho.rxjava_operators.R;
11+
12+
/**
13+
* Created by Carson_Ho on 17/9/12.
14+
* 合并数据源 & 统一展示
15+
*/
16+
17+
public class UsageDemo2 extends AppCompatActivity {
18+
19+
private String TAG = "RxJava";
20+
// 用于存放最终展示的数据
21+
private String result = "数据源来自 = " ;
22+
23+
24+
@Override
25+
protected void onCreate(Bundle savedInstanceState) {
26+
super.onCreate(savedInstanceState);
27+
setContentView(R.layout.activity_combine);
28+
29+
/*
30+
* 设置第1个Observable:通过网络获取数据
31+
* 此处仅作网络请求的模拟
32+
**/
33+
Observable<String> network = Observable.just("网络");
34+
35+
/*
36+
* 设置第2个Observable:通过本地文件获取数据
37+
* 此处仅作本地文件请求的模拟
38+
**/
39+
Observable<String> file = Observable.just("本地文件");
40+
41+
/*
42+
* 通过merge()合并事件 & 同时发送事件
43+
**/
44+
Observable.merge(network, file)
45+
.subscribe(new Observer<String>() {
46+
@Override
47+
public void onSubscribe(Disposable d) {
48+
49+
}
50+
51+
@Override
52+
public void onNext(String value) {
53+
Log.d(TAG, "数据源有: "+ value );
54+
result += value + "+";
55+
}
56+
57+
@Override
58+
public void onError(Throwable e) {
59+
Log.d(TAG, "对Error事件作出响应");
60+
}
61+
62+
// 接收合并事件后,统一展示
63+
@Override
64+
public void onComplete() {
65+
Log.d(TAG, "获取数据完成");
66+
Log.d(TAG, result );
67+
}
68+
});
69+
}
70+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package scut.carson_ho.rxjava_operators.CombineOperator;
2+
3+
import android.os.Bundle;
4+
import android.support.v7.app.AppCompatActivity;
5+
import android.text.TextUtils;
6+
import android.util.Log;
7+
import android.widget.Button;
8+
import android.widget.EditText;
9+
10+
import com.jakewharton.rxbinding2.widget.RxTextView;
11+
12+
import io.reactivex.Observable;
13+
import io.reactivex.annotations.NonNull;
14+
import io.reactivex.functions.Consumer;
15+
import io.reactivex.functions.Function3;
16+
import scut.carson_ho.rxjava_operators.R;
17+
18+
/**
19+
* Created by Carson_Ho on 17/9/12.
20+
* 联合判断
21+
*/
22+
23+
public class UsageDemo3 extends AppCompatActivity {
24+
25+
private String TAG = "RxJava";
26+
27+
28+
/*
29+
* 步骤1:设置控件变量 & 绑定
30+
**/
31+
EditText name,age,job;
32+
Button list;
33+
34+
35+
36+
@Override
37+
protected void onCreate(Bundle savedInstanceState) {
38+
super.onCreate(savedInstanceState);
39+
setContentView(R.layout.activity_combine);
40+
41+
42+
name = (EditText) findViewById(R.id.name);
43+
age = (EditText) findViewById(R.id.age);
44+
job = (EditText) findViewById(R.id.job);
45+
list = (Button) findViewById(R.id.list);
46+
47+
/*
48+
* 步骤2:为每个EditText设置被观察者,用于发送监听事件
49+
* 说明:
50+
* 1. 此处采用了RxBinding,需要引入依赖:compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
51+
* 2. 传入EditText控件,点击任1个EditText撰写时,都会发送数据事件 = Function3()的返回值(下面会详细说明)
52+
* 3. 采用skip(1)原因:跳过 一开始EditText无任何输入时的空值
53+
**/
54+
Observable<CharSequence> nameObservable = RxTextView.textChanges(name).skip(1);
55+
Observable<CharSequence> ageObservable = RxTextView.textChanges(age).skip(1);
56+
Observable<CharSequence> jobObservable = RxTextView.textChanges(job).skip(1);
57+
58+
/*
59+
* 步骤3:通过combineLatest()合并事件 & 联合判断
60+
**/
61+
Observable.combineLatest(nameObservable,ageObservable,jobObservable,new Function3<CharSequence, CharSequence, CharSequence,Boolean>() {
62+
@Override
63+
public Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2, @NonNull CharSequence charSequence3) throws Exception {
64+
65+
/*
66+
* 步骤4:规定表单信息输入不能为空
67+
**/
68+
// 1. 姓名信息
69+
boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) ;
70+
// 除了设置为空,也可设置长度限制
71+
// boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) && (name.getText().toString().length() > 2 && name.getText().toString().length() < 9);
72+
73+
// 2. 年龄信息
74+
boolean isUserAgeValid = !TextUtils.isEmpty(age.getText());
75+
// 3. 职业信息
76+
boolean isUserJobValid = !TextUtils.isEmpty(job.getText()) ;
77+
78+
/*
79+
* 步骤5:返回信息 = 联合判断,即3个信息同时已填写,"提交按钮"才可点击
80+
**/
81+
return isUserNameValid && isUserAgeValid && isUserJobValid;
82+
}
83+
84+
}).subscribe(new Consumer<Boolean>() {
85+
@Override
86+
public void accept(Boolean s) throws Exception {
87+
/*
88+
* 步骤6:返回结果 & 设置按钮可点击样式
89+
**/
90+
Log.e(TAG, "提交按钮是否可点击: "+s);
91+
list.setEnabled(s);
92+
}
93+
});
94+
95+
96+
97+
98+
99+
}
100+
}

0 commit comments

Comments
 (0)