Convert multiple api calls to flatMap with rxJava

This commit is contained in:
Mieszko Wrzeszczyński 2019-01-04 21:05:23 +01:00
parent 35ef25b2b7
commit cb1e7bcdef
7 changed files with 101 additions and 52 deletions

View File

@ -57,8 +57,12 @@ import java.util.Set;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Function;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.observers.DisposableSingleObserver;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
@ -158,29 +162,44 @@ public class BlackList extends AppCompatActivity {
);
}
private Observable<List<String>> getListOfBlacklistedUsers(String userId) {
return userService.getTutorBlacklistedByID(userId)
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
private Observable<User> getUserObservable(String userId) {
return userService
.getUserById(userId)
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
private void fetchBlackListedUsers() {
for (String GUID : blacklistedUsersIDs){
disposable.add(
userService.getUserById(GUID)
disposable.add(getListOfBlacklistedUsers(PrefUtils.getUserId(getApplicationContext()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<User>() {
.flatMap((Function<List<String>, Observable<String>>) Observable::fromIterable)
.flatMap((Function<String, ObservableSource<User>>) this::getUserObservable)
.subscribeWith(new DisposableObserver<User>() {
@Override
public void onSuccess(User user) {
public void onNext(User user) {
blacklistedUsers.add(user);
toggleEmptyNotes();
if (blacklistedUsers.size() == blacklistedUsersIDs.size()) {
mAdapter.notifyDataSetChanged();
}
}
@Override
public void onError(Throwable e) {
showError(e);
}
})
);
@Override
public void onComplete() {
toggleEmptyNotes();
mAdapter.notifyDataSetChanged();
}
}));
}
@ -235,6 +254,8 @@ public class BlackList extends AppCompatActivity {
private void handleAddUser(User user) {
Toast.makeText(this, R.string.add_user_to_list, Snackbar.LENGTH_LONG).show();
blacklistedUsersIDs.clear();
blacklistedUsers.clear();
blacklistedUsersIDs.addAll(user.getBlacklist());

View File

@ -148,10 +148,10 @@ public class LoginActivity extends AppCompatActivity {
}
private void loginProcess(String email, String password) {
ValidateUser user = new ValidateUser(email, password);
//LdapUser fakeUser = new LdapUser(email, password,"wmi","tutor",email,"Fałszywy",email);
disposable.add(ldapService.validate(user)
//disposable.add(ldapService.fakeValidate(fakeUser)
//ValidateUser user = new ValidateUser(email, password);
LdapUser fakeUser = new LdapUser(email, password,"wmi","tutor",email,"Fałszywy",email);
//disposable.add(ldapService.validate(user)
disposable.add(ldapService.fakeValidate(fakeUser)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResponse, this::handleError));

View File

@ -46,8 +46,12 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Function;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.observers.DisposableSingleObserver;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
@ -146,32 +150,45 @@ public class WhiteList extends AppCompatActivity {
);
}
private Observable<List<String>> getListOfWhitelistedUsers(String userId) {
return userService.getTutorWhitelistedByID(userId)
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
private Observable<User> getUserObservable(String userId) {
return userService
.getUserById(userId)
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
private void fetchWhiteListedUsers() {
for (String GUID : whitelistedUsersIDs){
disposable.add(
userService.getUserById(GUID)
disposable.add(getListOfWhitelistedUsers(PrefUtils.getUserId(getApplicationContext()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<User>() {
.flatMap((Function<List<String>, Observable<String>>) Observable::fromIterable)
.flatMap((Function<String, ObservableSource<User>>) this::getUserObservable)
.subscribeWith(new DisposableObserver<User>() {
@Override
public void onSuccess(User user) {
public void onNext(User user) {
whitelistedUsers.add(user);
toggleEmptyNotes();
if (whitelistedUsers.size() == whitelistedUsersIDs.size()) {
mAdapter.notifyDataSetChanged();
}
}
@Override
public void onError(Throwable e) {
showError(e);
}
})
);
}
}
@Override
public void onComplete() {
toggleEmptyNotes();
mAdapter.notifyDataSetChanged();
}
}));
}
private void showFabDialog(View v){
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext());
@ -223,6 +240,8 @@ public class WhiteList extends AppCompatActivity {
}
private void handleAddUser(User user) {
Toast.makeText(this, R.string.add_user_to_list, Snackbar.LENGTH_LONG).show();
whitelistedUsersIDs.clear();
whitelistedUsers.clear();
whitelistedUsersIDs.addAll(user.getWhitelist());
@ -231,6 +250,7 @@ public class WhiteList extends AppCompatActivity {
private void showError(Throwable e) {
String message;
Log.e("ERR", String.valueOf(e));
if (e instanceof HttpException) {
ResponseBody responseBody = ((HttpException) e).response().errorBody();
@ -241,6 +261,7 @@ public class WhiteList extends AppCompatActivity {
} else {
message = "Network Error !";
}
Log.e("ERR",message);
Toast.makeText(this, message, Snackbar.LENGTH_LONG).show();
}

View File

@ -10,6 +10,7 @@ import java.util.List;
import io.reactivex.Completable;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.Single;
import retrofit2.Response;
import retrofit2.http.Body;
@ -75,7 +76,7 @@ public interface UserService {
Completable setUserInActive(@Path("userID") String userID);
@GET("api/users/blacklist/{tutorID}")
Single<List<String>> getTutorBlacklistedByID(@Path("tutorID") String tutorID);
Single <List<String>> getTutorBlacklistedByID(@Path("tutorID") String tutorID);
@PUT("api/users/blacklist/{tutorID}")
Completable setTutorBlacklist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing);

View File

@ -6,7 +6,7 @@ import java.util.Arrays;
import java.util.List;
public class Const {
public final static String BASE_URL = "https://s416084.projektstudencki.pl/master/";
public final static String BASE_URL = "https://s416084.projektstudencki.pl/develop/";
public final static Integer mapRefreshInterval = 5000;
public final static Integer onlineBackgroundLocationInterval = 7000;
public final static Integer offlineBackgroundLocationInterval = 360000;

View File

@ -266,5 +266,8 @@
<string name="search_null">Brak wyników!</string>
<string name="modal_manual_hint">Nadaj nazwę tej lokalizacji.</string>
<!--(ENG) Blacked/Whited users -->
<string name="add_user_to_list">Użytkownik został dodany!</string>
</resources>

View File

@ -437,4 +437,7 @@
<string name="search_null">Search response is empty!</string>
<string name="modal_manual_hint">Insert a name for this localization.</string>
<!--(ENG) Blacked/Whited users -->
<string name="add_user_to_list">User has been added!</string>
</resources>