Skip to content

Commit

Permalink
Fix rxjava 1 -> 2 compatibility issues.
Browse files Browse the repository at this point in the history
  • Loading branch information
rengwuxian committed Sep 23, 2017
1 parent 5e88eb7 commit 56428d0
Show file tree
Hide file tree
Showing 15 changed files with 161 additions and 167 deletions.
5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,14 @@ dependencies {
compile 'com.android.support:support-v13:26.1.0'
compile 'com.android.support:design:26.1.0'
compile 'com.android.support:cardview-v7:26.1.0'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.7'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import android.app.Fragment;

import butterknife.OnClick;
import rx.Subscription;
import io.reactivex.disposables.Disposable;

public abstract class BaseFragment extends Fragment {
protected Subscription subscription;
protected Disposable disposable;

@OnClick(R.id.tipBt)
void tip() {
Expand All @@ -26,8 +26,8 @@ public void onDestroyView() {
}

protected void unsubscribe() {
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
if (disposable != null && !disposable.isDisposed()) {
disposable.dispose();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Observer;
import io.reactivex.Observer;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;

public class CacheFragment extends BaseFragment {
@BindView(R.id.loadingTimeTv) TextView loadingTimeTv;
Expand Down Expand Up @@ -53,26 +55,22 @@ void load() {
swipeRefreshLayout.setRefreshing(true);
startingTime = System.currentTimeMillis();
unsubscribe();
subscription = Data.getInstance()
.subscribeData(new Observer<List<Item>>() {
disposable = Data.getInstance()
.subscribeData(new Consumer<List<Item>>() {
@Override
public void onCompleted() {
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}

@Override
public void onNext(List<Item> items) {
public void accept(@NonNull List<Item> items) throws Exception {
swipeRefreshLayout.setRefreshing(false);
int loadingTime = (int) (System.currentTimeMillis() - startingTime);
loadingTimeTv.setText(getString(R.string.loading_time_and_source, loadingTime, Data.getInstance().getDataSourceText()));
adapter.setItems(items);
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
throwable.printStackTrace();
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,26 @@

import java.util.List;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subjects.BehaviorSubject;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.observers.DefaultObserver;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subjects.BehaviorSubject;

public class Data {
private static Data instance;
private static final int DATA_SOURCE_MEMORY = 1;
private static final int DATA_SOURCE_DISK = 2;
private static final int DATA_SOURCE_NETWORK = 3;
@IntDef({DATA_SOURCE_MEMORY, DATA_SOURCE_DISK, DATA_SOURCE_NETWORK}) @interface DataSource {}

@IntDef({DATA_SOURCE_MEMORY, DATA_SOURCE_DISK, DATA_SOURCE_NETWORK})
@interface DataSource {
}

BehaviorSubject<List<Item>> cache;

Expand Down Expand Up @@ -70,39 +75,39 @@ public void loadFromNetwork() {
.getBeauties(100, 1)
.subscribeOn(Schedulers.io())
.map(GankBeautyResultToItemsMapper.getInstance())
.doOnNext(new Action1<List<Item>>() {
.doOnNext(new Consumer<List<Item>>() {
@Override
public void call(List<Item> items) {
public void accept(List<Item> items) {
Database.getInstance().writeItems(items);
}
})
.subscribe(new Action1<List<Item>>() {
.subscribe(new Consumer<List<Item>>() {
@Override
public void call(List<Item> items) {
public void accept(List<Item> items) {
cache.onNext(items);
}
}, new Action1<Throwable>() {
}, new Consumer<Throwable>() {
@Override
public void call(Throwable throwable) {
public void accept(Throwable throwable) {
throwable.printStackTrace();
cache.onError(throwable);
cache.onError(throwable);
}
});
}

public Subscription subscribeData(@NonNull Observer<List<Item>> observer) {
public Disposable subscribeData(@NonNull Consumer<List<Item>> onNext, @NonNull Consumer<Throwable> onError) {
if (cache == null) {
cache = BehaviorSubject.create();
Observable.create(new Observable.OnSubscribe<List<Item>>() {
Observable.create(new ObservableOnSubscribe<List<Item>>() {
@Override
public void call(Subscriber<? super List<Item>> subscriber) {
public void subscribe(ObservableEmitter<List<Item>> e) throws Exception {
List<Item> items = Database.getInstance().readItems();
if (items == null) {
setDataSource(DATA_SOURCE_NETWORK);
loadFromNetwork();
} else {
setDataSource(DATA_SOURCE_DISK);
subscriber.onNext(items);
e.onNext(items);
}
}
})
Expand All @@ -111,14 +116,14 @@ public void call(Subscriber<? super List<Item>> subscriber) {
} else {
setDataSource(DATA_SOURCE_MEMORY);
}
return cache
.doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
cache = null;
}
})
.observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
return cache.doOnError(new Consumer<Throwable>() {
@Override
public void accept(@io.reactivex.annotations.NonNull Throwable throwable) throws Exception {
cache = null;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(onNext, onError);
}

public void clearMemoryCache() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,32 +25,17 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnCheckedChanged;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

public class ElementaryFragment extends BaseFragment {
@BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout swipeRefreshLayout;
@BindView(R.id.gridRv) RecyclerView gridRv;

ZhuangbiListAdapter adapter = new ZhuangbiListAdapter();
Observer<List<ZhuangbiImage>> observer = new Observer<List<ZhuangbiImage>>() {
@Override
public void onCompleted() {
}

@Override
public void onError(Throwable e) {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}

@Override
public void onNext(List<ZhuangbiImage> images) {
swipeRefreshLayout.setRefreshing(false);
adapter.setImages(images);
}
};

@OnCheckedChanged({R.id.searchRb1, R.id.searchRb2, R.id.searchRb3, R.id.searchRb4})
void onTagChecked(RadioButton searchRb, boolean checked) {
Expand All @@ -63,11 +48,23 @@ void onTagChecked(RadioButton searchRb, boolean checked) {
}

private void search(String key) {
subscription = Network.getZhuangbiApi()
disposable = Network.getZhuangbiApi()
.search(key)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
.subscribe(new Consumer<List<ZhuangbiImage>>() {
@Override
public void accept(@NonNull List<ZhuangbiImage> images) throws Exception {
swipeRefreshLayout.setRefreshing(false);
adapter.setImages(images);
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}
});
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

public class MapFragment extends BaseFragment {
private int page = 0;
Expand All @@ -40,24 +42,6 @@ public class MapFragment extends BaseFragment {
@BindView(R.id.gridRv) RecyclerView gridRv;

ItemListAdapter adapter = new ItemListAdapter();
Observer<List<Item>> observer = new Observer<List<Item>>() {
@Override
public void onCompleted() {
}

@Override
public void onError(Throwable e) {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}

@Override
public void onNext(List<Item> images) {
swipeRefreshLayout.setRefreshing(false);
pageTv.setText(getString(R.string.page_with_number, page));
adapter.setItems(images);
}
};

@OnClick(R.id.previousPageBt)
void previousPage() {
Expand All @@ -78,12 +62,25 @@ void nextPage() {
private void loadPage(int page) {
swipeRefreshLayout.setRefreshing(true);
unsubscribe();
subscription = Network.getGankApi()
disposable = Network.getGankApi()
.getBeauties(10, page)
.map(GankBeautyResultToItemsMapper.getInstance())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
.subscribe(new Consumer<List<Item>>() {
@Override
public void accept(@NonNull List<Item> items) throws Exception {
swipeRefreshLayout.setRefreshing(false);
pageTv.setText(getString(R.string.page_with_number, MapFragment.this.page));
adapter.setItems(items);
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}
});
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;

public class TokenFragment extends BaseFragment {

Expand All @@ -38,24 +38,24 @@ void upload() {
swipeRefreshLayout.setRefreshing(true);
unsubscribe();
final FakeApi fakeApi = Network.getFakeApi();
subscription = fakeApi.getFakeToken("fake_auth_code")
.flatMap(new Func1<FakeToken, Observable<FakeThing>>() {
disposable = fakeApi.getFakeToken("fake_auth_code")
.flatMap(new Function<FakeToken, Observable<FakeThing>>() {
@Override
public Observable<FakeThing> call(FakeToken fakeToken) {
public Observable<FakeThing> apply(FakeToken fakeToken) {
return fakeApi.getFakeData(fakeToken);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<FakeThing>() {
.subscribe(new Consumer<FakeThing>() {
@Override
public void call(FakeThing fakeData) {
public void accept(FakeThing fakeData) {
swipeRefreshLayout.setRefreshing(false);
tokenTv.setText(getString(R.string.got_data, fakeData.id, fakeData.name));
}
}, new Action1<Throwable>() {
}, new Consumer<Throwable>() {
@Override
public void call(Throwable throwable) {
public void accept(Throwable throwable) {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), R.string.loading_failed, Toast.LENGTH_SHORT).show();
}
Expand Down
Loading

0 comments on commit 56428d0

Please sign in to comment.