22
33import android .content .Context ;
44import android .os .Bundle ;
5+ import android .os .Handler ;
6+ import android .os .Looper ;
57import android .support .annotation .Nullable ;
68import android .support .v4 .app .Fragment ;
79import android .view .LayoutInflater ;
2123import rx .Observable ;
2224import rx .Observer ;
2325import rx .android .observables .AndroidObservable ;
24- import rx .android .schedulers .AndroidSchedulers ;
25- import rx .functions .Action1 ;
2626import rx .schedulers .Schedulers ;
2727import rx .subjects .BehaviorSubject ;
2828import timber .log .Timber ;
@@ -35,6 +35,7 @@ public class DemoAccumulateEventFragment
3535
3636 private LogAdapter _adapter ;
3737 private List <String > _logs ;
38+ private final Handler _mainThreadHandler = new Handler (Looper .getMainLooper ());
3839
3940 private BehaviorSubject <Observable <Integer >> _loggerSubject ; // Special Rx entity that modifies Observable behavior for aggregation
4041 private int _counter = 0 ;
@@ -46,8 +47,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
4647
4748 // Create the subscription
4849 AndroidObservable .bindFragment (this , _getObservable_ForTaps ()) // Observable
49- .observeOn (AndroidSchedulers .mainThread ())
50- .subscribeOn (Schedulers .io ())
50+ .observeOn (Schedulers .io ())
5151 .subscribe (_getSubscriber_ForTaps ()); // Subscriber
5252 }
5353
@@ -56,7 +56,8 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
5656 public void onButtonTapped () {
5757 // BehaviorSubject takes in Observable inputs.
5858 // So send 1 tap as an observable
59- _loggerSubject .onNext (Observable .from (1 ));
59+ _counter += 1 ;
60+ _loggerSubject .onNext (Observable .from (_counter ));
6061 }
6162
6263 // -----------------------------------------------------------------------------------
@@ -88,34 +89,39 @@ private Observer<? super Integer> _getSubscriber_ForTaps() {
8889 return this ;
8990 }
9091
91- /*private Action1<Integer> _getSubscriber_ForTaps() {
92- return new Action1<Integer>(){
92+ @ Override
93+ public void onCompleted () {
94+ Timber .d ("--------- completed " );
9395
96+ _mainThreadHandler .post (new Runnable () {
9497
95- @Override
96- public void call(Integer integer) {
9798
99+ @ Override
100+ public void run () {
101+ _addLogToAdapter (String .format ("%d taps" , _counter ));
102+ _counter = 0 ;
98103 }
99- };
100- }*/
101-
102-
103- @ Override
104- public void onCompleted () {
105- Timber .d ("--------- completed " );
106- _addLogToAdapter (String .format ("%d taps" , _counter ));
107- _counter = 0 ;
104+ });
108105 }
109106
110107 @ Override
111108 public void onNext (Integer integer ) {
112- _counter += integer ;
109+ Timber .d ("--------- on next %d" , integer );
110+ _simulateLongOperation ();
113111 onCompleted ();
114112 }
115113
116114 @ Override
117115 public void onError (Throwable e ) {
118- Timber .e (e , "--------- Woops something went wrong" );
116+ Timber .e (e , "--------- Woops on error!" );
117+ }
118+
119+ private void _simulateLongOperation () {
120+ try {
121+ Thread .sleep (2000 );
122+ } catch (InterruptedException e ) {
123+ e .printStackTrace ();
124+ }
119125 }
120126
121127 // -----------------------------------------------------------------------------------
0 commit comments