java - 如何从房间数据库中存储和检索图像
问题描述
我正在构建一个博客应用程序,允许用户为博客文章添加图片。我目前将数据存储为 URI 字符串,但我遇到的问题是图像仅在我第一次添加它时显示,如果我刷新页面或重新启动应用程序,图像将不会显示,只是一个没有图像的空白区域。
数据库实体
@Entity
class PostEntity(
var title: String,
var body: String,
var image: String? = null,
var date: String?
): Serializable {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
var likes:Int? = 0
}
从图库和相机中捕获图像并转换为 URI 字符串
private fun openCamera(){
try{
val CAMERA_REQUEST = 200
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, CAMERA_REQUEST)
}
catch (e:Exception){
Toast.makeText(context, "Please try again: ${e.message}", Toast.LENGTH_SHORT).show()
}
}
// function to be called in onActivityResult
private fun loadImage(requestCode: Int, imageView: ImageView, context: Context, data: Intent?){
if(requestCode == 200){
try{
val image = data!!.extras?.get("data") as Bitmap
imageView.setImageBitmap(image)
imageView.visibility = View.VISIBLE
imageUriLoader = getImageUriFromBitmap(context, image)
}
catch (e:Exception){
Toast.makeText(context, "Please try againt: ${e.message}", Toast.LENGTH_SHORT).show()
}
}
else if(requestCode == 201){
try{
val imageUri = data!!.data
imageUriLoader = imageUri
Picasso.get().load(imageUri).into(imageView)
imageView.visibility = View.VISIBLE
imageView.setImageURI(imageUri)
}
catch (e:Exception){
Toast.makeText(context, "Please try again: ${e.message}", Toast.LENGTH_SHORT).show()
}
}
else{
Toast.makeText(context, "Invalid request", Toast.LENGTH_SHORT).show()
}
}
我看过一些关于使用 blob 的帖子,其中大多数都不清楚,而且 blob 只允许 1MB 的图像大小限制这一事实使得想要一个更好的选择。请帮助更好地保存和恢复图像。
解决方案
推荐阅读
- c# - 使用 Dotnet Core 和 React js 为身份服务器 4 添加自定义登录/注册 Api
- python - 如何从文本中提取所有可能的名词短语
- reactjs - 如何在 onchange 中仅传递字符串而不是整个事件?
- javascript - 尝试使用 javascript 在终端中记录 JSON 响应
- ios-simulator - xcode模拟器可以用来代替bluestacks吗
- python-sockets - 使python socket recv更快的方法?
- oat++ - 在 centos 7 上安装 OAT++ 失败
- javascript - 如何使用 express-validator(版本 6.6.1)明智地验证字段条件
- javascript - 如何使用 Jasmine 测试嵌套的 ng-click
- animation - SwiftUI:NavigationView 中的显式动画损坏?