У меня есть следующий data класс:
data class MediaDetail(
val dateCreated:String,
val nasaId:String,
val keywords:List<String>,
val mediaType:String,
val center:String,
val title:String,
val description:String,
val location:String,
var assets:Map<String,String>?
)
Мне приходится его инициализировать дважды. Первым методом
fetchMediaDetails() все val поля и null для var поля assets. И уже с помощью второго метода
fetchMediaAsset() инициализирую поле assets.
В результате у меня получается вот такой Rx запрос. Можно ли его сделать в один метод, с использованием flatMap? Если да, то как?
fun fetchMediaDetails(nasaId:String){
_networkState.postValue(NetworkState.LOADING)
try {
compositeDisposable.add(
apiService.mediaInfo(nasaId)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.subscribe ({
fetchMediaAsset(it.item)
},{
_networkState.postValue(NetworkState.ERROR)
Log.e("MediaDetailsDataSource", it.message.toString())
})
)
}
catch (e: Exception){
Log.e("MediaDetailsDataSource", e.message.toString())
}
}
private fun fetchMediaAsset(mediaDetail: MediaDetail){
try {
compositeDisposable.add(
apiService.mediaAsset(mediaDetail.nasaId)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.subscribe({
mediaDetail.assets = it.item
_downloadedMediaDetailsResponse.postValue(mediaDetail)
_networkState.postValue(NetworkState.LOADED)
}, {
Log.e("MediaDetailsDataSource", it.message.toString())
})
)
}
catch (e: Exception){
Log.e("MediaDetailsDataSource", e.message.toString())
}
}