【问题标题】:Android Kotlin - Firestore image upload and displayAndroid Kotlin - Firestore 图像上传和显示
【发布时间】:2018-11-01 10:22:37
【问题描述】:

目前,作为示例,我正在重新创建类似 instagram 的帖子,用户可以在其中发布描述和图像(连同用户名,因为我还没有配置身份验证)。到目前为止,我只能发布用户名和描述。除此之外,我可以将新图像作为源加载到屏幕上的图像视图中。

我的数据类是:

data class Post(val username: String,
                val timestamp: Date,
                val postTxt: String,
                val numLikes: Int,
                val numComments: Int,
                val documentId: String)

我将数据放入 hashmap 如下:

val data = hashMapOf(
                NUM_LIKES to 0,
                NUM_COMMENTS to 0,
                POST_TXT to addPostTxt.text.toString().trim(),
                TIMESTAMP to FieldValue.serverTimestamp(),
                USERNAME to addUsernameTxt.text.toString().trim()
        )

然后通过它上传到firestore:

FirebaseFirestore.getInstance().collection(POST_REF)
                .add(data)
                .addOnSuccessListener { finish() }
                .addOnFailureListener {
                    Log.e("Exception", "Could not add post: $it")
                    toast("Could not add post")
                }

为了获取数据,我创建了一个函数,它可以像这样获取 QuerySnapshot 类型的快照:

// Clear all the posts before relaod
        posts.clear()

        snapshot.documents.forEach { document ->
            val data = document.data
            val name = data?.get(USERNAME) as String
            val timestamp = data[TIMESTAMP] as Date
            val postTxt = data[POST_TXT] as String
            val numLikes = data[NUM_LIKES] as Long
            val numComments = data[NUM_COMMENTS] as Long
            val documentId = document.id

            val newPost = Post(name, timestamp, postTxt, numLikes.toInt(), numComments.toInt(), documentId)

            posts.add(newPost)
        }

        postsAdapter.notifyDataSetChanged()

到目前为止,上传文本,当前上传时间对于上传和从数据库中读取都很好;但是我的问题是: - 将图像上传到 Firestore 和存储并在主窗口中相应显示(最好使用 Glide 或 picasso)的最佳方式是什么(遵循当前代码库)?

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    在 Firestore 中存储图像等二进制数据通常不是一个好主意。您可以很容易地超过limit 可以在文档中存储多少数据,即 1MB。大型文档在客户端加载也需要更多时间,如果您甚至不需要在读取时使用图像,那就更糟了。

    请考虑将图片上传到 Cloud Storage 并在文档的某个字段中保存该位置的路径。然后,当需要显示图像时,从那里加载它。

    【讨论】:

    • 您能否提供这样的示例作为参考,因为我几乎没有将文件上传到云存储然后通过链接显示它们的经验?无论如何谢谢你。
    • Cloud Storage for Firebase 的文档应该是一个很好的起点。 firebase.google.com/docs/storage
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多