Как совместить API мест поблизости и API сведений о местах? дооснащение java rx

Я очень новичок в 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);
    }

person kittyr    schedule 09.05.2019    source источник
comment
Возможный дубликат API Google Places, отсортированный по расстоянию   -  person fantaghirocco came to Rome    schedule 09.05.2019


Ответы (1)


Использование 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/

person dthulke    schedule 14.05.2019