Java android从手机相册中获取图像并将其存储在sqlite数据库中
我正在制作一个应用程序,用户可以从手机相册中选择图像,并将其存储到sqlite数据库的一个表中。我在这里看到过很多关于这个问题的帖子,但无法理解解决方案(它们对我也不起作用),在我的活动中,我有一个imageview,单击它可以打开相册并允许用户选择一个图像,还有一个按钮,单击它可以将图像存储在sqlite数据库中,我只能选择图像,但在这之后我被卡住了,我在代码中使用了这个方法:Java android从手机相册中获取图像并将其存储在sqlite数据库中,java,android,android-sqlite,Java,Android,Android Sqlite,我正在制作一个应用程序,用户可以从手机相册中选择图像,并将其存储到sqlite数据库的一个表中。我在这里看到过很多关于这个问题的帖子,但无法理解解决方案(它们对我也不起作用),在我的活动中,我有一个imageview,单击它可以打开相册并允许用户选择一个图像,还有一个按钮,单击它可以将图像存储在sqlite数据库中,我只能选择图像,但在这之后我被卡住了,我在代码中使用了这个方法: public void getImage(View view) throws IOException {
public void getImage(View view) throws IOException {
ImageView v=(ImageView)view;
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent,1);
}
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == RESULT_OK) {
try {
final Uri imageUri = data.getData();
final InputStream imageStream = getContext().getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
image.setImageBitmap(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
现在,在此之后,我应该如何将图像存储在数据库中?如果您确定图像不会从内部存储器中删除,则可以保存图像路径。如果要保存图像数据,可以执行以下操作 用于选择图像
private void selectImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, IMAGE_REQ);
}
在onActivityResult中,从意图数据
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == IMAGE_REQ && resultCode == Activity.RESULT_OK && data != null) {
Uri path = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), path);
Bitmap.createScaledBitmap(bitmap, 150, 150, true);
} catch (IOException e) {
e.printStackTrace();
}
}
}
从位图获取字节[]
public static byte[] getByteArrayFromBitmap(Bitmap bitmap) {
if(bitmap == null) return null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
然后将字节[]另存为sqlite中的blob
用于获取位图形式的图像
public static Bitmap getBitmapFromByteArray(byte[] blob){
if(blob == null) return null;
Bitmap bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
return bitmap;
}
你可能不想在关系数据库中存储blob。我找到了一个解决方案,说我可以将图像作为文件存储在应用程序本身中,并将该文件的路径存储在数据库中,但没有提供解释性代码,所以我不知道这一点是的,存储路径应该可以。你能帮我看一下这方面的代码教程吗?检查如何将位图存储到内部存储器。同样的问题也解决了获取文件名的问题。嘿,谢谢你的回答!但为什么您认为图像不会从内部存储中删除?如果我想从我的应用程序中删除图像,我相信我可以使用这里提到的删除方法,对吗?如果将图像存储在数据库中,则需要执行SQL语句进行修改。如果将图像存储为文件,则可以使用您提到的参照。