rxjava + retrofit - Как ждать и получить результат первой наблюдаемой в Android? - PullRequest
0 голосов
/ 17 сентября 2018

Я недавно начал изучать модернизацию и rxjava. Я ищу любые идеи о том, как ждать и получить результат первой наблюдаемой. По сути, я хочу применить его к простому логину. Первый вызов API получает время сервера. Второй вызов API будет ожидать результата первого вызова (т.е. времени сервера) и использовать его.

                Retrofit retrofit = RetrofitClient.getRetrofitClient();
                LocalServerInterface apiInterface = retrofit.create(LocalServerInterface .class);

                Observable<ServerTime> timeObservable = retrofit
                        .create(LocalServerInterface .class)
                        .getTime()
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());

                Observable<ServerNetwork> serverNetworkObservable = retrofit
                        .create(LocalServerInterface .class)
                        .getNetworks(//valuefromapicall1, anothervalue)
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());

Теперь я застрял прямо здесь. На втором наблюдаемом, особенно на методе getNetworks, я хотел использовать то, что получил с первого наблюдаемого. Есть идеи?

EDIT:

Я хотел сначала обработать результат вызова 1, прежде чем передать его в вызов API 2. Возможно ли это?

1 Ответ

0 голосов
/ 17 сентября 2018

Во-первых, не создавайте заново LocalServerInterface каждый раз, создайте его и используйте повторно. Создание экземпляра интерфейса - дорогостоящая операция.

LocalServerInterface apiInterface = retrofit.create(LocalServerInterface.class)

И чтобы начать второе наблюдаемое начало с результата первого наблюдаемого, вам нужно сделать flatMap.

Observable<ServerNetwork> serverNetworkObservable = apiInterface
                        .getTime()
                        .flatMap(time -> apiInterface.getNetworks(time, anothervalue))
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());

Подробнее см. Документацию flatMap .

ВАЖНОЕ ПРИМЕЧАНИЕ . В этом случае, когда первым наблюдаемым будет выпущен только один ответ, нет никакой разницы между использованием flatMap и concatMap. Для других случаев рассмотрим разницу между flatMap и concatMap.

...