Android сохраняет изображение из галереи в базу данных

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

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        Button pic = (Button) findViewById(R.id.button2);
        pic.setVisibility(View.GONE);
        ImageView picture = (ImageView) findViewById(R.id.imageView);
        picture.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        Intent intent = new Intent(this, recipelayout.class);
        intent.putExtra("BitmapImage", picturePath);
    }
}

person user3570270    schedule 11.07.2014    source источник


Ответы (1)


Да, ты можешь.

Сначала преобразуйте изображение в массив байтов:

 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 bitmap.compress(CompressFormat.PNG, 0, outputStream);
 byte data = outputStream.toByteArray();


А затем запишите его в БД как большой двоичный объект:

SQLiteProgram prog = sqlite.compileStatement("insert into ...... values(?, ?)");
p.bindBlob(1, data);
p.execute();


Вышеупомянутый метод возможен, но, по моему собственному опыту, уступает по производительности простой записи вашего изображения во внутреннюю память и сохранению его пути в базе данных:

A. Запишите изображение во внутреннюю память приложения.

ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("MyInternalDir", Context.MODE_PRIVATE);
File mypath = new File(directory, "fileName.jpg");


Bitmap bitmapImage = BitmapFactory.decodeFile(picturePath); //<----- or from any other source...

FileOutputStream fos = null;
try {
    fos = new FileOutputStream(mypath);
    bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
    fos.close();
} catch (Exception e) {
    e.printStackTrace();
}
String filePath = directory.getAbsolutePath();


B. И сохранить путь к файлу как ссылку в БД

SQLiteDatabase database = this.getWritableDatabase(); 
ContentValues values = new ContentValues(); 
values.put("ImagePath", filePath); 
database.insert(....); 


Я предпочитаю последний метод. Не стесняйтесь выбирать свой собственный.


person Gilad Haimov    schedule 11.07.2014
comment
чем заменить растровое изображение - person user3570270; 11.07.2014
comment
чем заменить растровое изображение? - person user3570270; 12.07.2014
comment
bitmapimage — это продукт BitmapFactory.decodeFile(picturePath) в вашем собственном коде. Смотрите мои изменения в исходном посте. - person Gilad Haimov; 12.07.2014
comment
что мне вставить сюда для изображения public boolean insertContact (имя строки, телефон строки) - person user3570270; 12.07.2014