X Tutup
Skip to content

Commit 657bcfc

Browse files
author
Kaushik Gopal
committed
feat: got basic logging working with RxJava (no accumulation yet)
1 parent b26a227 commit 657bcfc

File tree

2 files changed

+94
-10
lines changed

2 files changed

+94
-10
lines changed

app/src/main/java/com/morihacky/android/rxjava/DemoAccumulateEventFragment.java

Lines changed: 89 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,118 @@
1818
import butterknife.ButterKnife;
1919
import butterknife.InjectView;
2020
import butterknife.OnClick;
21+
import rx.Observable;
22+
import rx.Observer;
23+
import rx.android.observables.AndroidObservable;
24+
import rx.android.schedulers.AndroidSchedulers;
25+
import rx.functions.Action1;
26+
import rx.schedulers.Schedulers;
27+
import rx.subjects.BehaviorSubject;
28+
import timber.log.Timber;
2129

2230
public class DemoAccumulateEventFragment
23-
extends Fragment {
31+
extends Fragment
32+
implements Observer<Integer> {
2433

2534
@InjectView(R.id.accumulated_event_list) ListView _logsListView;
2635

2736
private LogAdapter _adapter;
2837
private List<String> _logs;
2938

30-
@Override
31-
public View onCreateView(LayoutInflater inflater,
32-
@Nullable ViewGroup container,
33-
@Nullable Bundle savedInstanceState) {
34-
View layout = inflater.inflate(R.layout.fragment_accumulate, container, false);
35-
ButterKnife.inject(this, layout);
36-
return layout;
37-
}
39+
private BehaviorSubject<Observable<Integer>> _loggerSubject; // Special Rx entity that modifies Observable behavior for aggregation
40+
private int _counter = 0;
3841

3942
@Override
4043
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
4144
super.onActivityCreated(savedInstanceState);
4245
_setupLogAdapter();
46+
47+
// Create the subscription
48+
AndroidObservable.bindFragment(this, _getObservable_ForTaps()) // Observable
49+
.observeOn(AndroidSchedulers.mainThread())
50+
.subscribeOn(Schedulers.io())
51+
.subscribe(_getSubscriber_ForTaps()); // Subscriber
4352
}
4453

54+
4555
@OnClick(R.id.accumulated_event_btn)
4656
public void onButtonTapped() {
57+
// BehaviorSubject takes in Observable inputs.
58+
// So send 1 tap as an observable
59+
_loggerSubject.onNext(Observable.from(1));
60+
}
61+
62+
// -----------------------------------------------------------------------------------
63+
// Main Rx entities
64+
65+
/**
66+
* Gets the Observable as emitted from BehaviorSubject
67+
*
68+
* It begins by emitting the item most recently emitted by source Observable
69+
* (or seed/default if none has yet been emitted - which is the case here)
70+
*
71+
* https://github.com/Netflix/RxJava/wiki/Subject#behaviorsubject
72+
*/
73+
private Observable<Integer> _getObservable_ForTaps() {
74+
if (_loggerSubject == null) {
75+
_loggerSubject = BehaviorSubject.create(Observable.from(0));
76+
}
77+
78+
return Observable.switchOnNext(_loggerSubject);
79+
}
4780

48-
_addLogToAdapter("Tapped");
81+
/**
82+
* Subscriber that has the 3 important actions
83+
* 1. onNext
84+
* 2. onError
85+
* 3. onCompleted
86+
*/
87+
private Observer<? super Integer> _getSubscriber_ForTaps() {
88+
return this;
89+
}
90+
91+
/*private Action1<Integer> _getSubscriber_ForTaps() {
92+
return new Action1<Integer>(){
93+
94+
95+
@Override
96+
public void call(Integer integer) {
97+
98+
}
99+
};
100+
}*/
101+
102+
103+
@Override
104+
public void onCompleted() {
105+
Timber.d("--------- completed ");
106+
_addLogToAdapter(String.format("%d taps", _counter));
107+
_counter = 0;
108+
}
109+
110+
@Override
111+
public void onNext(Integer integer) {
112+
_counter += integer;
113+
onCompleted();
114+
}
115+
116+
@Override
117+
public void onError(Throwable e) {
118+
Timber.e(e, "--------- Woops something went wrong");
49119
}
50120

51121
// -----------------------------------------------------------------------------------
52122
// Method that help wiring up the example (irrelevant to RxJava)
53123

124+
@Override
125+
public View onCreateView(LayoutInflater inflater,
126+
@Nullable ViewGroup container,
127+
@Nullable Bundle savedInstanceState) {
128+
View layout = inflater.inflate(R.layout.fragment_accumulate, container, false);
129+
ButterKnife.inject(this, layout);
130+
return layout;
131+
}
132+
54133
private void _setupLogAdapter() {
55134
_logs = new ArrayList<String>();
56135
_adapter = new LogAdapter(getActivity(), new ArrayList<String>());

app/src/main/java/com/morihacky/android/rxjava/DemoActivity.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@
55

66
import com.morihacky.android.rxjava.app.R;
77

8+
import timber.log.Timber;
9+
810
public class DemoActivity
911
extends FragmentActivity {
1012

1113
@Override
1214
protected void onCreate(Bundle savedInstanceState) {
1315
super.onCreate(savedInstanceState);
1416
setContentView(R.layout.activity_demo);
17+
18+
Timber.plant(new Timber.DebugTree());
19+
1520
getSupportFragmentManager().beginTransaction()
1621
.addToBackStack(this.toString())
1722
.replace(R.id.activity_container, new DemoFragment(), this.toString())

0 commit comments

Comments
 (0)
X Tutup