Как я могу добавить изображение в базу данных sqlite, а затем получить? используя Content Provider
* Я хочу получить этот образ, который я загрузил из галереи, сделанной камерой, для хранения в базе данных, чтобы использовать ее в других действиях *
Вы можете сохранить путь к изображению в базе данных. Затем в следующей операции извлеките его, и если файл существует, отобразите его...
Когда пользователь выбрал изображение из галереи, я думаю, вы получаете URI из onActivityResult()
. Вам просто нужно получить путь к нему, используя следующий код:
private String getRealPathFromURI(Uri contentUri) {
String[] store = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(mContext, contentUri, store, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String result = cursor.getString(column_index);
if (cursor != null ) {
cursor.close();
}
return result;
}
Просто сохраните путь в своей базе данных так, как вы хотите.
Позже попытайтесь получить файл. Если файл существует, обновите свой ImageView
File file = new File(savedPath);
if(file.exists){
// load image in your imageView
Bitmap mBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
yourImageView.setImageBitmap(mBitmap);
}
Изображения сохраняются как BLOB в Sqlitedatabase.
Для сохранения изображения в базе данных
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getItemname());
values.put(KEY_DESCRIPTION, contact.getDescription());
Log.i("","Adding image of Type Bitmap"+contact.getImage());
if(contact.getImage()!=null) {
values.put(KEY_IMAGE, Utility.getBytes(contact.getImage()));
}
Где getBytes (Bitmap) будет:
public static byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
При получении изображения из базы данных:
if(cursor.getBlob(3)!=null)
{
contact.setImage(Utility.getPhoto(cursor.getBlob(3));
}
else
{
contact.setImage(null);
}
И getPhoto (BLOB) будет:
// convert from byte array to bitmap
public static Bitmap getPhoto(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}