Как совместить Места рядом API и Места детали API? модернизация Java RX - PullRequest
0 голосов
/ 09 мая 2019

Я очень новичок в Android и мне нужна помощь, пожалуйста. Мне нужно, чтобы рестораны находились рядом с пользователем, и отображали их информацию в виде переработчика. Поэтому я использую Places api: рядом и детали. У меня есть два запроса, один из которых выбирает один список ресторанов рядом с пользователем (я получаю один объект, который содержит список объектов ресторанов, я сохраняю их в массиве объектов ресторанов) И тот, который извлекает информацию о каждом ресторане, найденном по первому запросу (для работы нужен идентификатор места, найденный по первому запросу). Проблема в том, что запросы не выполняются в хорошем порядке, поэтому мое представление переработчика не отображается должным образом. Я, вероятно, должен связать свои запросы, чтобы иметь только один? Я провел некоторое исследование, но не могу найти, как это сделать, потому что мне нужно сделать второй запрос для каждого ресторана, найденного в первом запросе.

Вот мои потоки

Как мне создать один поток с ними?

private static PlacesService placesService = PlacesService.retrofit.create(PlacesService.class);


    public static Observable<RestaurantObject> streamFetchRestaurants(String latitudeLongitude, int radius, String type, String apiKey) {
        return placesService.getRestaurants(latitudeLongitude,radius,type, apiKey)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .timeout(10, TimeUnit.SECONDS);
    }

    public static Observable<RestaurantInformationObject> streamFetchRestaurantInfos(String id, String apikey) {
        return placesService.getRestaurantInfo(id, apikey)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .timeout(10, TimeUnit.SECONDS);
    }

1 Ответ

0 голосов
/ 14 мая 2019

Использование concatMap должно архивировать то, что вы хотите:

streamFetchRestaurants(latLon, radius, type, apiKey)
            .concatMap(restaurantObject -> streamFetchRestaurantInfos(restaurantObject.id, apiKey))
            .subscribe(restaurantInformationObject -> {
                // Do something with the restaurant information object
            });

в отличие от flatMap сохраняет первоначальный порядок элементов вашего ресторана. Посмотрите документацию RxJava или следующую статью для получения более подробной информации: https://fernandocejas.com/2015/01/11/rxjava-observable-tranformation-concatmap-vs-flatmap/

...