Intereting Posts
Не удалось найти класс «org.apache.http.entity.mime.content.Filebody», ссылающийся на метод Измените сторону, которую текст появится на радиокнопке Android FileNotFoundException res / drawable-hdpi / scrollbar_handle_vertical.9.png Возможно использование drawable-mdpi-fr, drawable-hdpi-fr, drawable-ldpi-fr, для локализации с различными разрешениями Как отключить SSLv3 в android для HttpsUrlConnection? Android AlarmManager после перезагрузки Почему MediaPlayer не создает ошибку при создании экземпляра? Очень простой код, но получил ошибку «Активность была уничтожена» при использовании фрагмента TableLayout ScrollView Вертикальный и горизонтальный Android Canvas drawLine Вы загрузили отлаживаемый APK. По соображениям безопасности вам нужно отключить отладку, прежде чем ее можно будет опубликовать в Google Play-Upload apk для игры в Google Умение камеры Android Не удалось загрузить модуль memtrack Logcat Error Версия для Android в формате PDF для api Альтернативный setButton

Несколько запросов с модификацией для объединения результатов

Я использую retrofit (1.9) и пытаюсь выяснить, как я могу назвать 2 apis и объединить результаты.

Я думаю, результаты должны быть объединены, когда последний api закончил возвращать ответ …

Как я могу это сделать?

Udpate, по словам Антонов, я пробовал следующее:

Добавлено в gradle:

compile 'io.reactivex:rxjava:1.0.+' compile 'io.reactivex:rxandroid:0.23.+' 

Интерфейс Api

  @GET("/maps/api/place/details/json") Observable<PlaceDetailResult1> getPlacesFrom1( @Query("key") String key, @Query("placeid") String placeid); @GET("api/places/{id}/ratings") Observable<PlaceDetailResult2> getPlacesFrom2(@Path("id") String id); 

В фрагменте

  IPlaces api = adapter.create(IPlaces.class); //endpoint1 IPlaces api2 = adapter2.create(IPlaces.class); //endpoint2 Observable.combineLatest( api.getPlacesFrom1("key", placeId), api2.getPlacesFrom2(placeId), new Func2<PlaceDetailResult1, PlaceDetailResult2, MergedReviews>() { @Override public MergedReviews call(PlaceDetailResult placeDetailResult1, PlaceDetailResult2 placeDetailResult2) { // processToMerge( placeDetailResult1, placeDetailResult2) return mr; } }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<MergedReviews>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(MergedReviews mr) { SetAdapter(mr.reviews); SetPhotosAdapter(mr.photos); } }); 

Одна вещь, может быть, стоит отметить, когда я добавил RxJava к gradle, я получал некоторую ошибку, которая ушла после того, как я сделал multiDexEnabled true в файле gradle

Solutions Collecting From Web of "Несколько запросов с модификацией для объединения результатов"

Вы можете использовать RxJava и комбинировать результаты следующим образом: Объединение вызовов API с RX Java

Вот учебник, как использовать RxJava и Retrofit 1.9 : http://randomdotnext.com/retrofit-rxjava/

Мы используем RxJava в android и комбинируем результат. Я объяснил каждый шаг
Давайте сначала определим наш объект Retrofit для доступа к API Github, затем настроим два наблюдаемых для двух указанных выше сетевых запросов:

 Retrofit repo = new Retrofit.Builder() .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); Observable<JsonObject> userObservable = repo .create(GitHubUser.class) .getUser(loginName) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()); Observable<JsonArray> eventsObservable = repo .create(GitHubEvents.class) .listEvents(loginName) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()); 

Интерфейсы Retrofit достаточно просты:

 public interface GitHubUser { @GET("users/{user}") Observable<JsonObject> getUser(@Path("user") String user); } public interface GitHubEvents { @GET("users/{user}/events") Observable<JsonArray> listEvents(@Path("user") String user); } 

В последнее время мы используем Zip-метод RxJava для объединения наших двух наблюдаемых и дождаемся их завершения до создания нового Observable.

 Observable<UserAndEvents> combined = Observable.zip(userObservable, eventsObservable, new Func2<JsonObject, JsonArray, UserAndEvents>() { @Override public UserAndEvents call(JsonObject jsonObject, JsonArray jsonElements) { return new UserAndEvents(jsonObject, jsonElements); } }); 

Что такое UserAndEvents? Просто просто POJO объединить два объекта:

 public class UserAndEvents { public UserAndEvents(JsonObject user, JsonArray events) { this.events = events; this.user = user; } public JsonArray events; public JsonObject user; } 

Наконец, назовем метод subscribe на нашем новом объединенном Observable:

 combined.subscribe(new Subscriber<UserAndEvents>() { ... @Override public void onNext(UserAndEvents o) { // You can access the results of the // two observabes via the POJO now } });