android - Android Kotlin - Firestore 图像上传和显示
问题描述
目前作为示例,我正在重新创建类似 instagram 的帖子,用户可以在其中发布描述和图像(连同用户名,因为我仍然没有配置身份验证)。到目前为止,我只能发布用户名和描述。除此之外,我可以将新图像作为源加载到屏幕上的图像视图中。
我的数据类是:
data class Post(val username: String,
val timestamp: Date,
val postTxt: String,
val numLikes: Int,
val numComments: Int,
val documentId: String)
我将数据放入哈希图中,如下所示:
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)的最佳方式是什么(遵循当前代码库)?
解决方案
在 Firestore 中存储图像等二进制数据通常不是一个好主意。您可以很容易地超过可以在文档中存储多少数据的限制,即 1MB。大型文档在客户端上加载也需要更多时间,如果您甚至不需要在读取时使用图像,那就更糟了。
相反,请考虑将图像上传到 Cloud Storage 并在文档的字段中保存该位置的路径。然后,当需要显示图像时,从那里加载它。
推荐阅读
- java - 如何构建一个在拉伸时显示更多按钮的 android 小部件?
- mongodb - 如何在猫鼬的匹配聚合查询中添加查询“大于”日期
- c - 这个小代码的时间复杂度是多少?
- neural-network - 可视化自动编码器输出
- android-layout - 在服务内重复一个动作
- .net - 在 .NET Core 中获取调用 3rd 方 API 的不受支持的媒体类型
- javascript - 如何通过控制器在网站 odoo 12 中选择下拉列表将数据保存到后端?
- python - 将项目添加到列表中的特定位置
- javascript - Javascript如何检查传入的参数是否是一个对象
- css - 更改 React Material UI 文本字段和大纲输入的边框颜色