Skip to content

Commit 09d424c

Browse files
committed
Fix executing observable transformation on wrong scheduler.
1 parent 67b1f96 commit 09d424c

File tree

4 files changed

+58
-14
lines changed

4 files changed

+58
-14
lines changed

app/src/main/java/com/fernandocejas/android10/rx/sample/activity/SampleActivityObservableTransfor.java

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.os.Bundle;
1111
import android.util.Log;
1212
import android.widget.Button;
13+
import android.widget.TextView;
1314
import android.widget.Toast;
1415
import butterknife.ButterKnife;
1516
import butterknife.InjectView;
@@ -27,6 +28,11 @@ public class SampleActivityObservableTransfor extends Activity {
2728

2829
private static final String LOG_TAG = "SampleActivityObservableTransfor";
2930

31+
private static final String SEPARATOR = " ";
32+
33+
@InjectView(R.id.tv_streamOriginalOrder) TextView tv_streamOriginalOrder;
34+
@InjectView(R.id.tv_flatMapResult) TextView tv_flatMapResult;
35+
@InjectView(R.id.tv_concatMapResult) TextView tv_concatMapResult;
3036
@InjectView(R.id.btn_flatMap) Button btn_flatMap;
3137
@InjectView(R.id.btn_concatMap) Button btn_concatMap;
3238

@@ -52,6 +58,7 @@ protected void onCreate(Bundle savedInstanceState) {
5258

5359
ButterKnife.inject(this);
5460
initialize();
61+
populateData();
5562
}
5663

5764
@Override
@@ -66,12 +73,12 @@ private void initialize() {
6673
}
6774

6875
@OnClick(R.id.btn_flatMap) void onFlatMapClick() {
69-
this.buildNumbersObservable().flatMap(SQUARE_OF_NUMBER).subscribe(new Observer<Integer>() {
70-
final StringBuilder stringBuilder = new StringBuilder(10);
76+
final Observer<Integer> observer = new Observer<Integer>() {
77+
final StringBuilder stringBuilder = new StringBuilder(40);
7178

7279
@Override public void onNext(Integer number) {
7380
stringBuilder.append(number);
74-
stringBuilder.append(Character.SPACE_SEPARATOR);
81+
stringBuilder.append(SEPARATOR);
7582
debugLog("onFlatMapClick() ------>>>> " + number);
7683
}
7784

@@ -84,16 +91,19 @@ private void initialize() {
8491
@Override public void onError(Throwable e) {
8592
// handle the exception
8693
}
87-
});
94+
};
95+
96+
this.buildNumbersObservable().flatMap(SQUARE_OF_NUMBER)
97+
.observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
8898
}
8999

90100
@OnClick(R.id.btn_concatMap) void onConcatMapClick() {
91-
this.buildNumbersObservable().concatMap(SQUARE_OF_NUMBER).subscribe(new Observer<Integer>() {
92-
final StringBuilder stringBuilder = new StringBuilder(10);
101+
final Observer<Integer> observer = new Observer<Integer>() {
102+
final StringBuilder stringBuilder = new StringBuilder(40);
93103

94104
@Override public void onNext(Integer number) {
95105
stringBuilder.append(number);
96-
stringBuilder.append(Character.SPACE_SEPARATOR);
106+
stringBuilder.append(SEPARATOR);
97107
debugLog("onConcatMapClick() ------>>>> " + number);
98108
}
99109

@@ -106,11 +116,14 @@ private void initialize() {
106116
@Override public void onError(Throwable e) {
107117
// handle the exception
108118
}
109-
});
119+
};
120+
121+
this.buildNumbersObservable().concatMap(SQUARE_OF_NUMBER)
122+
.observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
110123
}
111124

112125
private Observable<Integer> buildNumbersObservable() {
113-
return this.dataManager.getNumbers().subscribeOn(AndroidSchedulers.mainThread());
126+
return this.dataManager.getNumbers();
114127
}
115128

116129
private void showToast(String message) {
@@ -121,11 +134,20 @@ private void debugLog(String message) {
121134
Log.d(LOG_TAG, message);
122135
}
123136

124-
private void printConcatMapResult(String result) {
125-
137+
private void printFlatMapResult(String result) {
138+
this.tv_flatMapResult.setText(result);
126139
}
127140

128-
private void printFlatMapResult(String result) {
141+
private void printConcatMapResult(String result) {
142+
this.tv_concatMapResult.setText(result);
143+
}
129144

145+
private void populateData() {
146+
StringBuilder stringBuilder = new StringBuilder(15);
147+
for (int number : dataManager.getNumbersSync()) {
148+
stringBuilder.append(number);
149+
stringBuilder.append(SEPARATOR);
150+
}
151+
this.tv_streamOriginalOrder.setText(stringBuilder.toString());
130152
}
131153
}

app/src/main/java/com/fernandocejas/android10/rx/sample/data/DataManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public Observable<Integer> getNumbers() {
3333
return Observable.from(numbers);
3434
}
3535

36+
public List<Integer> getNumbersSync() {
37+
return this.numbers;
38+
}
39+
3640
public Observable<Integer> squareOf(int number) {
3741
return Observable.just(number * number).subscribeOn(Schedulers.from(this.jobExecutor));
3842
}

app/src/main/res/layout/activity_sample_observervable_transform.xml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,28 @@
3434
</RelativeLayout>
3535

3636
<LinearLayout
37-
android:layout_width="wrap_content"
38-
android:layout_height="wrap_content"
37+
android:layout_width="match_parent"
38+
android:layout_height="match_parent"
3939
android:orientation="vertical"
4040
android:layout_above="@id/rl_buttonsHolder"
4141
>
4242

43+
<TextView
44+
android:layout_width="match_parent"
45+
android:layout_height="wrap_content"
46+
android:text="@string/string_sample_observable_transformation"
47+
/>
48+
49+
<TextView
50+
style="@style/AppTheme.TextViewTitle"
51+
android:text="@string/tv_label_original_order"
52+
/>
53+
<TextView
54+
android:id="@+id/tv_streamOriginalOrder"
55+
android:layout_width="match_parent"
56+
android:layout_height="wrap_content"
57+
/>
58+
4359
<TextView
4460
style="@style/AppTheme.TextViewTitle"
4561
android:text="@string/tv_label_flatMap_result"

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
<string name="btn_text_concat_map">Observable.concatMap()</string>
1515
<string name="btn_text_add_element">Add Element</string>
1616

17+
<string name="tv_label_original_order">Original stream order:</string>
1718
<string name="tv_label_flatMap_result">flatMap() Result:</string>
1819
<string name="tv_label_concatMap_result">concatMap() Result:</string>
1920

2021
<string name="string_content_description">Non accessible view</string>
22+
<string name="string_sample_observable_transformation">This sample demonstrates an observable transformation by applying a function (square of a number) to a set of values. The basic idea is to see the difference between both flatMap() and concatMap() methods whereas one take care of the order and the other does not.</string>
2123

2224
</resources>

0 commit comments

Comments
 (0)