以下情况。
我从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
}
我无法用Transformations解决这个问题,所以我决定选择另一种方法。在上传了预览图片后,我试图获取下载网址,将这些信息存储到数据库中。
这个方法的问题是,我使用了firebase的图像调整扩展和删除原始图像选项。创建调整大小的图片需要一点时间,所以我在下一步中出现了错误,因为图片并不存在。但我用重试机制解决了这个问题。