1616
1717import java .util .ArrayList ;
1818import java .util .List ;
19+ import java .util .concurrent .TimeUnit ;
1920
2021import butterknife .ButterKnife ;
2122import butterknife .InjectView ;
2223import butterknife .OnClick ;
2324import rx .Observable ;
2425import rx .Observer ;
25- import rx .android . observables . AndroidObservable ;
26+ import rx .Subscriber ;
2627import rx .schedulers .Schedulers ;
27- import rx .subjects .BehaviorSubject ;
2828import timber .log .Timber ;
2929
3030public class DemoAccumulateEventFragment
31- extends Fragment
32- implements Observer <Integer > {
31+ extends Fragment {
3332
3433 @ InjectView (R .id .accumulated_event_list ) ListView _logsListView ;
3534
3635 private LogAdapter _adapter ;
3736 private List <String > _logs ;
3837 private final Handler _mainThreadHandler = new Handler (Looper .getMainLooper ());
3938
40- private BehaviorSubject <Observable <Integer >> _loggerSubject ; // Special Rx entity that modifies Observable behavior for aggregation
4139 private int _counter = 0 ;
4240
4341 @ Override
@@ -46,9 +44,9 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
4644 _setupLogAdapter ();
4745
4846 // Create the subscription
49- AndroidObservable .bindFragment (this , _getObservable_ForTaps ()) // Observable
50- .observeOn (Schedulers .io ())
51- .subscribe (_getSubscriber_ForTaps ()); // Subscriber
47+ // AndroidObservable.bindFragment(this, _getObservable ()) // Observable
48+ // .observeOn(Schedulers.io())
49+ // .subscribe(_getObserver ()); // Observer
5250 }
5351
5452
@@ -57,7 +55,7 @@ public void onButtonTapped() {
5755 // BehaviorSubject takes in Observable inputs.
5856 // So send 1 tap as an observable
5957 _counter += 1 ;
60- _loggerSubject . onNext ( Observable . from ( _counter ));
58+ _getObservable (). observeOn ( Schedulers . io ()). subscribe ( _getObserver ( ));
6159 }
6260
6361 // -----------------------------------------------------------------------------------
@@ -71,57 +69,57 @@ public void onButtonTapped() {
7169 *
7270 * https://github.com/Netflix/RxJava/wiki/Subject#behaviorsubject
7371 */
74- private Observable <Integer > _getObservable_ForTaps () {
75- if (_loggerSubject == null ) {
76- _loggerSubject = BehaviorSubject .create (Observable .from (0 ));
77- }
72+ private Observable <List <Integer >> _getObservable () {
73+ return Observable .create (new Observable .OnSubscribe <Integer >() {
74+
7875
79- return Observable .switchOnNext (_loggerSubject );
76+ @ Override
77+ public void call (Subscriber <? super Integer > observer ) {
78+ observer .onNext (1 );
79+ }
80+ }).buffer (2 , TimeUnit .SECONDS );
8081 }
8182
8283 /**
83- * Subscriber that has the 3 important actions
84- * 1. onNext
84+ * Observer that handles the result List<Integer> from Observable
85+ * through the 3 important actions:
86+ *
87+ * 1. onCompleted
8588 * 2. onError
86- * 3. onCompleted
89+ * 3. onNext
8790 */
88- private Observer <? super Integer > _getSubscriber_ForTaps () {
89- return this ;
90- }
91+ private Observer <List <Integer >> _getObserver () {
92+ return new Observer <List <Integer >>() {
9193
92- @ Override
93- public void onCompleted () {
94- Timber .d ("--------- completed " );
9594
96- _mainThreadHandler .post (new Runnable () {
95+ @ Override
96+ public void onCompleted () {
97+ _mainThreadHandler .post (new Runnable () {
9798
9899
99- @ Override
100- public void run () {
101- _addLogToAdapter (String .format ("%d taps" , _counter ));
102- _counter = 0 ;
100+ @ Override
101+ public void run () {
102+ _addLogToAdapter (String .format ("%d taps" , _counter ));
103+ _counter = 0 ;
104+ }
105+ });
103106 }
104- });
105- }
106107
107- @ Override
108- public void onNext (Integer integer ) {
109- Timber .d ("--------- on next %d" , integer );
110- _simulateLongOperation ();
111- onCompleted ();
112- }
108+ @ Override
109+ public void onError (Throwable e ) {
110+ Timber .e (e , "--------- Woops on error!" );
111+ }
113112
114- @ Override
115- public void onError (Throwable e ) {
116- Timber .e (e , "--------- Woops on error!" );
117- }
113+ @ Override
114+ public void onNext (List <Integer > integers ) {
115+ for (int i : integers ) {
116+ _counter += i ;
117+ }
118118
119- private void _simulateLongOperation () {
120- try {
121- Thread .sleep (2000 );
122- } catch (InterruptedException e ) {
123- e .printStackTrace ();
124- }
119+ Timber .d ("--------- on next with a count of %d" , _counter );
120+ onCompleted ();
121+ }
122+ };
125123 }
126124
127125 // -----------------------------------------------------------------------------------
0 commit comments