Bagaimana cara menggabungkan api Tempat terdekat dan api detail Tempat? retrofit java rx

Saya sangat baru mengenal Android dan saya butuh bantuan. Saya perlu mendapatkan restoran di dekat pengguna, dan menampilkan informasinya dalam tampilan pendaur ulang. Jadi saya menggunakan Places api: terdekat dan detailnya. Saya memiliki dua permintaan, satu yang mengambil satu daftar restoran terdekat pengguna (saya mengambil satu objek yang berisi daftar objek restoran, saya menyimpannya dalam array objek restoran) Dan satu lagi yang mengambil detail setiap restoran yang ditemukan oleh permintaan pertama (membutuhkan id tempat agar berfungsi, ditemukan dengan permintaan pertama). Masalahnya adalah permintaan tidak dieksekusi dalam urutan yang baik, sehingga tampilan pendaur ulang saya tidak ditampilkan dengan baik. Saya mungkin harus merangkai permintaan saya agar hanya memiliki satu? Saya melakukan riset tetapi saya tidak dapat menemukan cara melakukannya, karena saya perlu membuat permintaan kedua untuk setiap restoran yang ditemukan di permintaan pertama.

Ini aliran saya

Bagaimana cara membuat satu streaming dengan mereka?

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 sumber
comment
Kemungkinan duplikat Google Places Api diurutkan berdasarkan jarak   -  person fantaghirocco came to Rome    schedule 09.05.2019


Jawaban (1)


Menggunakan concatMap harus mengarsipkan apa yang Anda inginkan:

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

berbeda dengan flatMap, ini mempertahankan pesanan asli item restoran Anda. Lihat dokumentasi RxJava atau artikel berikut untuk lebih jelasnya: https://fernandocejas.com/2015/01/11/rxjava-observable-tranformation-concatmap-vs-flatmap/

person dthulke    schedule 14.05.2019