20 Temmuz 2020 Pazartesi

RxJava Single Sınıfı - Bir Observable

Giriş
Single nesnesi yaratıldıktan sonra subscribeOn metodu çağrılır.

create metodu
Şöyle yaparız.
Single<String> saveBookToRepository(AddBookRequest addBookRequest) {

  return Single.create(singleSubscriber -> {
    if (notFound) {
      singleSubscriber.onError(new EntityNotFoundException());
    else {
      singleSubscriber.onSuccess(addedBookId);
    }
  });
}
defer metodu
Örnek
Şöyle yaparız.
public Single<List<String>> getHealthChecks(JsonArray endpoints) {
  return Single.defer(() -> {
    List<Single<String>> healthChecks = endpoints
      .stream()
      .map(endpoint -> getHealthStatus(client, endpoint.toString()))
      .collect(Collectors.toList());

    return consumeHealthChecks(healthChecks);
  });
}

private Single<List<String>> consumeHealthChecks(List<Single<String>> healthChecks) {
  return Single.merge(healthChecks)
    .timeout(1500, TimeUnit.MILLISECONDS)
    .toList();
}
error metodu
Single.error() yerine direkt exception da fırlatılabilir.
Örnek
Şöyle yaparız
public static Single<Integer> externalMethod(int x){
  int result = 0;
  try{
    /* Some database / time consuming logic */
    result = x % 0;
  }
  catch (Exception e){
    throw new CustomException(e.getMessage());                // --> APPROACH 1
      OR
    return Single.error(new CustomException(e.getMessage())); // --> APPROACH 2
  }
  return Single.just(result);
}
fromCallable metodu
Şöyle yaparız.
Single.fromCallable(() -> {
  ...
  return true;
  }
)
 .observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> {
    // finished
  }, error -> {
    // error
});
subscribe metodu
Örnek
Şöyle yaparız
Single.just(1)
  .flatMap(x -> externalMethod(x))
  .subscribe(
    s -> System.out.println("Success : " + s),
    e -> System.out.println("Error : " + e)
  );


public static Single<Integer> externalMethod(int x){
  return Single.just(...);
}
subscribeOn metodu
Şöyle yaparız.
return bookService.addBook(toAddBookRequest(addBookWebRequest)) //Single nesnesi döner
  .subscribeOn(Schedulers.io())
  .map(s -> ResponseEntity.created(...).body(...));



zip metodu
Örnek
Şöyle yaparız
public static <A, B> Single<B> zipOver(Single<Function<A, B>> applicativeFunctor,
  Single<A> applicativeValue) {
  return Single.zip(
    applicativeFunctor,
    applicativeValue,
    (Function<A, B> f, A a) -> f.apply(a));
}

Hiç yorum yok:

Yorum Gönder