【问题标题】:Sort items by creation time in firebase storage in Android在 Android 的 Firebase 存储中按创建时间对项目进行排序
【发布时间】:2021-03-16 23:08:17
【问题描述】:

我需要按创建时间对 firebase 文件夹中的项目进行排序。创建时间在项目的元数据中。

我已经能够做到,但我觉得有更好的方法来使用监听器和“任务”实用程序类来完成它。

我尝试关注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)
        }
    }

【问题讨论】:

  • Firebase STORAGE 没有此功能@AlexMamo

标签: firebase sorting kotlin task storage


【解决方案1】:

这就是我们最终的结果:

 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)
                    }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2019-02-08
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多