Как объединить два запроса к API через Retrofit2
я делаю два асинхронных запроса с помощью Retrofit2 и RxJava3, один для получения информации о тикере (компания, логотип, валюта), а через второй запрос получаю данные о его цене (изменение, текущую стоимость). В каждом запросе используется одно и то же название тикера. Как мне объединить данные с этих двух запросов в одно, для последующего вывода? Вот инициализация ViewModels:
priceModel = ViewModelProvider(this).get(PriceViewModel::class.java)
priceModel.getPriceObserver().observe(this, Observer<RealTimePriceModel> { it ->
if(it != null) {
Log.d(TAG, it.toString())
}
else {
Log.e(TAG, "Error in fetching data")
}
})
profileModel = ViewModelProvider(this).get(CompanyProfileViewModel::class.java)
profileModel.getCompanyProfileObserver().observe(this, Observer<CompanyProfileModel> {
if(it != null) {
Log.d(TAG, it.toString())
}
else {
Log.e(TAG, "Error in fetching data")
}
})
Вот ViewModel Профиля:
var profile: MutableLiveData<CompanyProfileModel> = MutableLiveData()
fun getCompanyProfileObserver(): MutableLiveData<CompanyProfileModel> {
return profile
}
fun makeApiCall(symbol: String) {
val retrofitInstance = RetrofitFinhubInstance.getRetrofitInstance().create(RetrofitService::class.java)
retrofitInstance.getCompanyInfoFromAPI(symbol)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getCompanyProfileObserverRx())
}
private fun getCompanyProfileObserverRx(): Observer<CompanyProfileModel> {
return object : Observer<CompanyProfileModel> {
override fun onComplete() {
// Hide progress bar
}
override fun onError(e: Throwable?) {
profile.postValue(null)
}
override fun onNext(t: CompanyProfileModel?) {
profile.postValue(t)
}
override fun onSubscribe(d: Disposable?) {
// Show progress bar
}
}
}
А вот ViewModel цены:
var price: MutableLiveData<RealTimePriceModel> = MutableLiveData()
fun getPriceObserver(): MutableLiveData<RealTimePriceModel> {
return price
}
fun makeApiCall(ticker: String) {
val retrofitInstance = RetrofitYahooFinanceInstance.getRetrofitInstance().create(RetrofitService::class.java)
retrofitInstance.getRealTimePrice(ticker)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getPriceObserverRx())
}
private fun getPriceObserverRx(): Observer<RealTimePriceModel> {
return object : Observer<RealTimePriceModel> {
override fun onComplete() {
// Hide progress bar
}
override fun onError(e: Throwable?) {
price.postValue(null)
}
override fun onNext(t: RealTimePriceModel?) {
price.postValue(t)
}
override fun onSubscribe(d: Disposable?) {
// Show progress bar
}
}
}
И вот как вызываю запросы:
fun getRealTimePrice(input: String) {
priceModel.makeApiCall(input)
}
fun getCompanyProfile(symbol: String) {
profileModel.makeApiCall(symbol)
}