Как хранить изображения в ORMLite - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть заявление, что у каждого участника есть фотография профиля. Пользователь может выбрать изображение из галереи. Я собираюсь сохранить изображение профиля пользователя в базе данных ORMLite.

     profileImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(i, 999);
                }
            });

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 999 && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri uri = data.getData();
            try {
                photo = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                profileImage.setImageBitmap(photo);
                user.setMember_picture(imageToByte(photo));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private byte[] imageToByte(Bitmap b){
        ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
        b.compress(Bitmap.CompressFormat.PNG, 0, outputstream);
        return outputstream.toByteArray();
    }

В классе Уэр:

  @DatabaseField(columnName = "PICTURE", dataType = DataType.BYTE_ARRAY)
    private byte[] member_picture;

но это не работает!

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Хранение изображений (или любых других файлов) в базе данных, как правило, является неоптимальным решением, так как доступ к ним может быть очень дорогим и медленным с точки зрения ввода-вывода. Эта проблема может усугубляться, когда ваши пользователи выбирают особенно большие изображения.

Хорошей и часто используемой практикой является сохранение копии файла изображения, а затем сохранение пути к этому файлу в базе данных.

0 голосов
/ 02 сентября 2018

Вы можете сохранить свое изображение в виде строки в вашей базе данных. Для этого вы должны использовать класс Base64, например:

private String imageToString(Bitmap b){
    ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
    b.compress(Bitmap.CompressFormat.PNG, 0, outputstream);
    return Base64.encodeToString(outputstream.toByteArray(), Base64.DEFAULT);         
}  

Но не забудьте обновить DataType в вашем @DatabaseField.

...