Передать измененный результат одного наблюдаемого из одного класса в другой класс способом RxJava? - PullRequest
0 голосов
/ 06 октября 2018

Я хочу передать результат из класса B в класс A как наблюдаемый

  1. Класс Api выполняет сетевой вызов и передает myResult (через Single.fromCallable ()) в класс B
  2. Класс B получает myResult и изменяет его
  3. Класс B должен передать измененный результат (или любую ошибку) в класс A, где был сделан первоначальный вызов (класс A вызывает метод ClassB, чтобы сделатьapi call)

    , как мне выполнить шаг 3 реактивным / RxJava способом?

не уверен, что Map - это то, что я ищу, но любой рабочий пример поможетмассивно.Также разделение между классом A, классом B и классом Api должно иметь

Class A {
         CalssB.MethodB()
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeBy(onError = {//handle error
                    }, onSuccess = {
                       // handle success i.e myResult = it
                    })

    }

 Class B {
           fun methodB(): Single<MyResult> {

            var myResult = MyResult()

            api.getMyResult()
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeBy(
                            onSuccess = {
    //3 - here is I need help , modify result and pass it as an observable to class A where (CalssB.MethodB() is called)
                            }
                    , onError = {
    //3 - here is I need help , pass Error to Class A where (CalssB.MethodB() is called)
                    }
                    )

}

Api {

 public Single<MyResult> getMyResult() {
return Single.fromCallable(() -> doGetMyResult()); //network call
        }
    }
}

1 Ответ

0 голосов
/ 06 октября 2018

Если я правильно вас понял, вы хотите получить данные в ClassA и изменить их в ClassB, а затем передать обратно в ClassA.Похоже, вы могли бы сделать это с простым Single.map.Добавьте метод к вашему ClassB, который возвращает Function<Result,ModifiedResult> и используйте .map(ClassB.methodThatReturnsFunction()) перед subscribeBy в ClassA.

Второй вариант - добавление аналогичного метода, но метод, который возвращает

SingleTransformer<Result,ModifiedResult>, и использованиеSingle.compose.

Таким образом, вы создаете свой собственный поток и инкапсулируете его в ClassB.

Надеюсь, это поможет.

...