【问题标题】:android take image from phone album and store it in sqlite databaseandroid从手机相册中获取图像并将其存储在sqlite数据库中
【发布时间】:2020-11-23 00:05:57
【问题描述】:

我正在制作一个应用程序,用户可以在其中选择手机相册中的图像并将其存储到 sqlite 数据库中的表中,我在这里看到了很多关于这个问题的帖子,但无法理解解决方案(他们也没有工作对我来说),在我的活动中,我有一个 imageview,点击它会打开相册并允许用户选择一个图像,而且我还有一个按钮,点击它会将图像存储在 sqlite 数据库中,我只能选择图像,但在那之后我被卡住了,我在我的代码中使用了这个方法:

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();

            }
        }
    }

现在我应该怎么做才能将图像存储在数据库中?

【问题讨论】:

  • 您可能不想将 blob 存储在关系数据库中。
  • 我找到了一个解决方案,说我可以将图像作为文件存储在应用程序本身中,并将该文件的路径存储在数据库中,但没有提供解释性代码,所以我不知道关于这个
  • 是的,存储路径应该没问题。
  • 你能帮我看看这个代码教程吗?
  • 检查stackoverflow.com/questions/15662258/… 了解如何将位图存储到内部存储。同样的问题也解决了获取文件名的问题。

标签: java android android-sqlite


【解决方案1】:

如果您确定图像不会从内部存储中删除,您可以保存图像路径。如果要保存图像数据,可以执行以下操作。

用于选择图像

private void selectImage() {
     Intent intent = new Intent();
     intent.setType("image/*");
     intent.setAction(Intent.ACTION_GET_CONTENT);
     startActivityForResult(intent, IMAGE_REQ);
}

在onActivityResult中,来自Intent数据...

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();
    }

然后将 byte[] 保存为 sqlite 中的 blob

用于获取图像为位图

public static Bitmap getBitmapFromByteArray(byte[] blob){
        if(blob == null) return null;

        Bitmap bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
        return bitmap;
    }

【讨论】:

  • 您好,谢谢您的回复!但是为什么您认为图像不会从内部存储中删除?如果我想从我的应用程序中删除图像,我相信我可以使用这里提到的删除方法,对吧? stackoverflow.com/questions/3554722/…
  • 如果将图片存储在数据库中,则需要执行SQL语句进行修改。如果您将图像存储为文件,则可以使用您提到的参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2012-11-29
相关资源
最近更新 更多