Java 如何从房间数据库中存储和检索图像
我正在构建一个博客应用程序,允许用户为博客文章添加图片。我目前将数据存储为URI字符串,但问题是图像仅在我首次添加时显示,如果我刷新页面或重新启动应用程序,图像将不会显示,只是一个没有图像的空白区域 数据库实体 从多媒体资料和照相机捕获图像并转换为URI字符串 我看过一些关于使用blob的帖子,其中大多数都不清楚,事实上blob只允许图像大小限制为1MB,这让want成为了一个更好的选择。Java 如何从房间数据库中存储和检索图像,java,android,kotlin,android-room,Java,Android,Kotlin,Android Room,我正在构建一个博客应用程序,允许用户为博客文章添加图片。我目前将数据存储为URI字符串,但问题是图像仅在我首次添加时显示,如果我刷新页面或重新启动应用程序,图像将不会显示,只是一个没有图像的空白区域 数据库实体 从多媒体资料和照相机捕获图像并转换为URI字符串 我看过一些关于使用blob的帖子,其中大多数都不清楚,事实上blob只允许图像大小限制为1MB,这让want成为了一个更好的选择。 请帮助我们更好地保存和还原图像。在数据库中,您应该有一个字符串类型的字段(或等效的VARCHAR等),作为
请帮助我们更好地保存和还原图像。在数据库中,您应该有一个字符串类型的字段(或等效的VARCHAR等),作为您选择的目录中的图像路径,例如 然后,您可以添加您需要的任何字段,例如,在您的情况下,您需要一个userID作为登录用户的外键。
因此,一旦用户加载图像,您就将文件保存到所需的路径,然后将该路径保存到数据库中,以便下次用户登录时,您查找其图像路径,然后将其加载到网页上。我建议将其转换为并存储在房间中,或者您可以将其路径存储在数据库中。图像不应存储在数据库中。相反,它们必须作为文件存储在设备上,并且它们相应的路径必须存储在DB@AtishAgrawal请协助我如何做that@Ashish请帮忙。如果你使用base64,我已经提供了如何转换和获取base64字符串并存储在db中的链接。
@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
}
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()
}
}