- Sử dụng Operator Map
/*Sử dụng Operator Map*/ public void map(){ Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUser/{userId}") .addPathParameter("userId", "1") .build() .getObjectObservable(UserApi.class) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Function<UserApi, User>() { @Override public User apply(UserApi userApi) throws Exception { return new User(userApi); } }).subscribe(new Observer<User>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(User user) { textView.setText(user.toString()); } @Override public void onError(Throwable e) { e.printStackTrace(); } @Override public void onComplete() { } }); }
- Sử dụng zip để phân tích dữ liệu từ 2 Api trả về
/** * Trả về List User thích Dế */ private Observable<List<User>> getCricketFansObservable() { return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllCricketFans") .build() .getObjectListObservable(User.class); } /* * Trả về danh sách người thích bóng đá */ private Observable<List<User>> getFootballFansObservable() { return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFootballFans") .build() .getObjectListObservable(User.class); } /* * Trả về danh sách người thích cả 2 Dế và bóng đá */ private void findUsersWhoLovesBoth() { Observable.zip(getCricketFansObservable(), getFootballFansObservable(), new BiFunction<List<User>, List<User>, List<User>>() { @Override public List<User> apply(List<User> cricketFans, List<User> footballFans) throws Exception { return filterUserWhoLovesBoth(cricketFans, footballFans); } }).subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<User>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(List<User> users) { for (User user : users) { textView.append(user.toString()); textView.append("\n"); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } private List<User> filterUserWhoLovesBoth(List<User> cricketFans, List<User> footballFans) { List<User> userWhoLovesBoth = new ArrayList<>(); for (User cricketFan : cricketFans) { for (User footballFan : footballFans) { if (cricketFan.id == footballFan.id) { userWhoLovesBoth.add(cricketFan); } } } return userWhoLovesBoth; }
- Sử dụng flatmap và filter
/*Sử dụng flatmap và filter*/ private Observable<List<User>> getAllMyFriendsObservable() { return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFriends/{userId}") .addPathParameter("userId", "1") .build() .getObjectListObservable(User.class); } public void flatMapAndFilter(){ getAllMyFriendsObservable() .flatMap(new Function<List<User>, ObservableSource<User>>() { @Override public ObservableSource<User> apply(List<User> users) throws Exception { return Observable.fromIterable(users);//Trả về từng user } }) .filter(new Predicate<User>() { @Override public boolean test(User user) throws Exception { return user.isFollowing;//Trả về những user đang follow tôi } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(User user) { textView.append(user.toString()); textView.append("\n"); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); }
- Sử dụng flatmap:
/*Chỉ sử dụng flatmap*/ private Observable<List<User>> getUserListObservable() { return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}") .addPathParameter("pageNumber", "0") .addQueryParameter("limit", "10") .build() .getObjectListObservable(User.class); } private Observable<UserDetail> getUserDetailObservable(long id) { return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}") .addPathParameter("userId", String.valueOf(id)) .build() .getObjectObservable(UserDetail.class); } public void flatmap(){ getUserListObservable() .flatMap(new Function<List<User>, ObservableSource<User>>() { @Override public ObservableSource<User> apply(List<User> users) throws Exception { return Observable.fromIterable(users);//Trả về từng user } }) .flatMap(new Function<User, ObservableSource<UserDetail>>() { @Override public ObservableSource<UserDetail> apply(User user) throws Exception { return getUserDetailObservable(user.id); } }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<UserDetail>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(UserDetail userDetail) { textView.setText(userDetail.toString()); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); }
- Sử dụng flatmap kèm với zip:
public void flatMapWithZip(){ getUserListObservable() .flatMap(new Function<List<User>, ObservableSource<User>>() { @Override public ObservableSource<User> apply(List<User> users) throws Exception { return Observable.fromIterable(users); } }) .flatMap(new Function<User, ObservableSource<Pair<UserDetail, User>>>() { @Override public ObservableSource<Pair<UserDetail, User>> apply(User user) throws Exception { return Observable.zip(getUserDetailObservable(user.id), Observable.just(user), new BiFunction<UserDetail, User, Pair<UserDetail, User>>() { @Override public Pair<UserDetail, User> apply(UserDetail userDetail, User user) throws Exception { return new Pair<>(userDetail, user); } }); } }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Pair<UserDetail, User>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Pair<UserDetail, User> userDetailUserPair) { UserDetail userDetail = userDetailUserPair.first; User user = userDetailUserPair.second; textView.append(userDetail.toString()); textView.append("\n"); textView.append(user.toString()); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); }