[Demonstration 1]

[Buggy Method]
@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

[Buggy Hunk]
EventBus.getDefault().register(this);

[Patch]
Log.d("ㅇD","START");

[Demonstration 2]

[Buggy Method]
@Override
public Observable<T> call(Observable<T> observable) {
    Observable<T> observable1 = observable.subscribeOn(Schedulers.io()).doOnSubscribe(new Action0() {

        @Override
        public void call() {
            LoadDialogUtil.showLoadingDialog(context, toast);
        }
    }).subscribeOn(AndroidSchedulers.mainThread()).observeOn(AndroidSchedulers.mainThread());
    if (object instanceof RxAppCompatActivity) {
        return observable1.compose(((RxAppCompatActivity) object).<T>bindToLifecycle());
    } else if (object instanceof RxFragment) {
        return observable1.compose(((RxFragment) object).<T>bindToLifecycle());
    } else {
        return observable1;
    }
}

[Buggy Hunk]
LoadDialogUtil.showLoadingDialog(context, toast);

[Patch]
LoadDialogUtil.getInstance().showLoadingDialog(context, toast);

[Demonstration 3]

[Buggy Method]
private void calculateSum() {
    if (mCompositeSubscription == null)
        return;
    // TODO 한달 날짜 설정할 수 있도록 하기
    Calendar from = Calendar.getInstance();
    from.set(Calendar.DATE, 1);
    Calendar to = Calendar.getInstance();
    to.set(Calendar.DATE, 31);
    Subscription subscription = mDataService.findAccounts(from.getTime(), to.getTime()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<List<Account>>() {

        @Override
        public void call(List<Account> accounts) {
            double sum = 0;
            for (Account account : accounts) {
                if (account.getType() == Account.TYPE_INCOME)
                    sum += account.getAmount();
                else
                    sum -= account.getAmount();
            }
            Log.d(LOG_TAG, "Sum = " + sum);
        }
    }, new Action1<Throwable>() {

        @Override
        public void call(Throwable throwable) {
            Log.e(LOG_TAG, "Getting list failed.", throwable);
        }
    });
    mCompositeSubscription.add(subscription);
    //        // TODO RxAndroid 적용
    //        mRealm.executeTransaction(new Realm.Transaction() {
    //            @Override
    //            public void execute(Realm realm) {
    //                // TODO 한달 날짜 설정할 수 있도록 하기
    //                Calendar from = Calendar.getInstance();
    //                from.set(Calendar.DATE, 1);
    //                Calendar to = Calendar.getInstance();
    //                to.set(Calendar.DATE, 31);
    //                RealmResults<Account> results = realm.where(Account.class)
    //                        .between("date", from.getTime(), to.getTime())
    //                        .findAll();
    //                Log.d("MainPresenter", "Found Results = " + results.size());
    //                double sum = 0;
    //                for (Account account : results) {
    //                    if (account.getType() == Account.TYPE_INCOME)
    //                        sum += account.getAmount();
    //                    else
    //                        sum -= account.getAmount();
    //                }
    //                Log.d("MainPresenter", "Sum = " + sum);
    //            }
    //        });
}

[Buggy Hunk]
.subscribeOn(Schedulers.io())

[Patch]
.subscribeOn(Schedulers.trampoline())