Преобразование полученных живых данных из разных источников (хранилище, хранилище) с помощью преобразований - PullRequest
0 голосов
/ 06 мая 2020

Следующая ситуация:

Я получаю данные из 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
}

1 Ответ

0 голосов
/ 18 мая 2020

Неугомонно я не смог решить эту проблему с помощью преобразований, поэтому решил выбрать другой подход. После загрузки изображения предварительного просмотра я пытаюсь получить URL-адрес загрузки, чтобы сохранить эту информацию в базе данных.

Проблема с этим подходом заключалась в том, что я использовал расширение firebase для изменения размера изображения с опцией удаления исходного изображения. Создание изображений с измененным размером занимает немного времени, поэтому на следующем шаге у меня возникла ошибка, так как изображение не существовало. Но я решил эту проблему с помощью механизма повтора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...