android взять изображение из альбома телефона и сохранить его в базе данных sqlite - PullRequest
0 голосов
/ 02 августа 2020

Я делаю приложение, в котором пользователь может выбирать изображения из альбома телефона и сохранять их в таблице в базе данных sqlite, я видел здесь много сообщений об этой проблеме, но не мог понять решения (они также не работали для меня), в моей деятельности у меня есть изображение, которое при нажатии открывает альбом и позволяет пользователю выбрать изображение, а также у меня есть кнопка, которая при нажатии сохранит изображение в базе данных 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();

            }
        }
    }

теперь, что мне делать после этого, чтобы сохранить изображение в базе данных?

1 Ответ

1 голос
/ 03 августа 2020

Если вы уверены, что изображения не будут удалены из внутреннего хранилища, вы можете сохранить путь к изображению. Если вы хотите сохранить данные изображения, вы можете сделать следующее.

для выбора изображения

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

получить byte [] из растрового изображения

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

затем сохранить байт [] как blob в sqlite

для получения изображений как растрового изображения

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

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