在 Android 的 firebase 存储中按创建时间排序项目
Sort items by creation time in firebase storage in Android
我需要按创建时间对 firebase 文件夹中的项目进行排序。创建时间在项目的元数据中。
我已经能够做到,但我觉得有更好的方法可以使用侦听器和“任务”实用程序来完成它 class。
我尝试遵循 this guide 但我的用例更复杂
getMedatada 文档:https://firebase.google.com/docs/reference/android/com/google/firebase/storage/StorageReference#getMetadata()
getCreationTimeMillis 文档:https://firebase.google.com/docs/reference/android/com/google/firebase/storage/StorageMetadata#getCreationTimeMillis()
这是我的代码:
FirebaseStorage.getInstance().reference.child(category).listAll().addOnSuccessListener {
val listOfTalks = mutableListOf<Task<StorageMetadata>>()
val items = it.items
items.forEach { listOfTalks.add(it.metadata) } // collecting the list of task for getting the metadata
val metadataTasks = Tasks.whenAllComplete(listOfTalks)
// wait fore all the metadata
metadataTasks.addOnSuccessListener {
// put them in a helper class and sort
val sortedBy = it.map {
val storageMetadata = it.result as StorageMetadata
ReferenceAndTimeForSorting(
storageMetadata.reference!!,
storageMetadata.creationTimeMillis
)
}.sortedByDescending { it.timestamp }
// keep al the references int the result
storageReferenceList.addAll(sortedBy.map { it.reference })
}
metadataTasks.addOnFailureListener {
// if there is an error getting the metadata, keep the default sorting
storageReferenceList.addAll(items)
}
}
这就是我们最终得到的结果:
FirebaseStorage.getInstance()
.reference
.child(category)
.listAll()
.addOnSuccessListener { listAllResult ->
val metadataTaskList = listAllResult.items.map { it.metadata }
Tasks.whenAllComplete(metadataTaskList)
.addOnSuccessListener { taskList ->
val storageReferenceList = taskList
.map { it.result as StorageMetadata }
.sortedByDescending { it.creationTimeMillis }
.mapNotNull { it.reference }
updateGallery(storageReferenceList)
}
.addOnFailureListener {
updateGallery(listAllResult.items)
}
}
我需要按创建时间对 firebase 文件夹中的项目进行排序。创建时间在项目的元数据中。
我已经能够做到,但我觉得有更好的方法可以使用侦听器和“任务”实用程序来完成它 class。
我尝试遵循 this guide 但我的用例更复杂
getMedatada 文档:https://firebase.google.com/docs/reference/android/com/google/firebase/storage/StorageReference#getMetadata()
getCreationTimeMillis 文档:https://firebase.google.com/docs/reference/android/com/google/firebase/storage/StorageMetadata#getCreationTimeMillis()
这是我的代码:
FirebaseStorage.getInstance().reference.child(category).listAll().addOnSuccessListener {
val listOfTalks = mutableListOf<Task<StorageMetadata>>()
val items = it.items
items.forEach { listOfTalks.add(it.metadata) } // collecting the list of task for getting the metadata
val metadataTasks = Tasks.whenAllComplete(listOfTalks)
// wait fore all the metadata
metadataTasks.addOnSuccessListener {
// put them in a helper class and sort
val sortedBy = it.map {
val storageMetadata = it.result as StorageMetadata
ReferenceAndTimeForSorting(
storageMetadata.reference!!,
storageMetadata.creationTimeMillis
)
}.sortedByDescending { it.timestamp }
// keep al the references int the result
storageReferenceList.addAll(sortedBy.map { it.reference })
}
metadataTasks.addOnFailureListener {
// if there is an error getting the metadata, keep the default sorting
storageReferenceList.addAll(items)
}
}
这就是我们最终得到的结果:
FirebaseStorage.getInstance()
.reference
.child(category)
.listAll()
.addOnSuccessListener { listAllResult ->
val metadataTaskList = listAllResult.items.map { it.metadata }
Tasks.whenAllComplete(metadataTaskList)
.addOnSuccessListener { taskList ->
val storageReferenceList = taskList
.map { it.result as StorageMetadata }
.sortedByDescending { it.creationTimeMillis }
.mapNotNull { it.reference }
updateGallery(storageReferenceList)
}
.addOnFailureListener {
updateGallery(listAllResult.items)
}
}