通过Transformations转换从不同来源(存储,firestore)获取的生活数据。

问题描述 投票:0回答:1

以下情况。

我从firestore中检索数据通过 LiveData 来显示它在 RecyclerView 像这样。

val placesDataSet: LiveData<ArrayList<Pair<String, PlaceModel>>> = db.getCollection("places")

PlaceModel 有一个属性 previewImageUrl: String 将被传递给 Picasso 图库内 RecyclerView.Adapter.

在检索到 "地点 "信息后(这是一个 "地方 "信息)。ArrayListPair<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
}
android-recyclerview google-cloud-firestore firebase-storage picasso android-livedata
1个回答
0
投票

我无法用Transformations解决这个问题,所以我决定选择另一种方法。在上传了预览图片后,我试图获取下载网址,将这些信息存储到数据库中。

这个方法的问题是,我使用了firebase的图像调整扩展和删除原始图像选项。创建调整大小的图片需要一点时间,所以我在下一步中出现了错误,因为图片并不存在。但我用重试机制解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.