Следующая ситуация:
Я получаю данные из firestore через LiveData
, чтобы отобразить их в RecyclerView
следующим образом:
val placesDataSet: LiveData<ArrayList<Pair<String, PlaceModel>>> = db.getCollection("places")
PlaceModel
имеет свойство previewImageUrl: String
, которое будет передано в Picasso
библиотеку изображений внутри RecyclerView.Adapter
.
После получения информации о «месте» (которая представляет собой ArrayList
из Pair<documentId: String, place: PlaceModel
, я хочу получить previewImageUrl
из хранилища Firebase на следующем шаге и сопоставить его с соответствующим объектом PlaceModel
перед отображением это в RecyclerView
.
Структура данных хранилища выглядит следующим образом: images/$documentId/preview_image.jpg
и поэтому мне нужно сначала получить информацию о месте (из-за documentId
), чтобы определить правильную папку с изображениями.
Как я могу справиться с этим, используя Transformations
? У меня также есть функция под названием getDownloadUrl(path: String): MutableLiveData<Resource<String>>
, которая возвращает downloadUrl для предоставленного path
из хранилища.
То, что я пробовал до сих пор:
val dataSetFinalState = Transformations.map(placesDataSet) {
mapDownloadUrl(it)
}
private fun mapDownloadUrl(arrayList: ArrayList<Pair<String, PlaceModel>>):
ArrayList<Pair<String, PlaceModel>> {
arrayList.forEach {
it.second.previewImageUrl = // How to call getDownloadUrl(path: String) here and wait for response?
}
return arrayList
}