Вы можете использовать RX Java для этого наверняка.
выполните следующие изменения.
1) добавьте зависимости, обновите их до последней, если это возможно
implementation 'com.android.support:cardview-v7:27.1.0'
implementation 'com.android.support:design:27.1.0'
implementation('com.squareup.retrofit2:retrofit:2.3.0')
{
exclude module: 'okhttp'
}
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
2) В свой вызов по модернизации сети добавьте RxJavaCallAdapterFactory
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
3) измените ваши существующие вызовы на что-то вроде ниже
public interface TMDBAPICLIENT {
final String BASE_URL = "https://api.themoviedb.org/3/";
@GET("discover/movie")
Observable<DISCOVERPOJO> getDiscover(@Query("sort_by") String sort_by, @Query("api_key") String api_key);
@GET("trending/{media_type}/{time_window}")
Observable<TRENDINGPOJO> getTrending(@Path("media_type") String media_type, @Path("time_window") String time_window, @Query("api_key") String api_key);
@GET("person/popular")
Observable<DISCOVERPOJO> getPeople(@Query("api_key") String api_key);
@GET("tv/top_rated")
Observable<DISCOVERPOJO> getTopRatedTv(@Query("api_key") String api_key);
@GET("tv/popular")
Observable<DISCOVERPOJO> getPopularTv(@Query("api_key") String api_key);
@GET("tv/on_the_air")
Observable<DISCOVERPOJO> getOnAirTv(@Query("api_key") String api_key);
@GET("tv/airing_today")
Observable<DISCOVERPOJO> getAiringTodayTv(@Query("api_key") String api_key);
}
4) Используйте оператор слияния zip для zip они вместе.
Observable.zip(getDiscover("desc","SECRET_KEY"), getPeople("asc","SECRET_KEY"), new Func2<DISCOVERPOJO, DISCOVERPOJO, ArrayList<TestData>>() {
@Override
public ArrayList<TestData> call(DISCOVERPOJO responseOne, DISCOVERPOJO responseTwo) {
ArrayList<TestData> testDataList = new ArrayList();
// process data from response responseOne & responseTwo
return testDataList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ArrayList<TestData>>() {
@Override
public void onNext(ArrayList<TestData> testDataList) {
//do something with new data
}
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted" );
// you can show alert here or do something when completed
}
@Override
public void onError(Throwable t) {
Log.d(TAG, "onError Throwable: " + t.toString() );
}
});
где ArrayList<TestData>
- данные, которые мы хотим вернуть из оператора zip. Вы можете изменить это на то, что вы хотите.