2016-10-17 2 views
-1

Как я могу добавить изображение в базу данных sqlite, а затем получить? используя Content Provider enter image description hereДобавление изображения в Sqlite -android-

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

+0

Hi Mohamed, вы должны использовать Blobs. См. Ответ ниже http://stackoverflow.com/questions/11790104/how-to-storebitmap-image-and-retrieve-image-from-sqlite-database-in-android http://stackoverflow.com/questions/9357668/how-to-store-image-in-sqlite-database –

ответ

0

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

Когда пользователь выбрал изображение из галереи, я думаю, вы получаете 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); 
} 
+0

Или используйте некоторую кодировку, такую ​​как Base64, но ответ Анто намного лучше. –

+1

@AndriyOmelchenko - это не хорошая идея сохранить код изображения base64, представьте себе 5000 символов для одного изображения? – sioesi

+0

@sioesi Я просто хотел сказать, что любые данные могут быть сохранены как текст (и, например, зашифрованы перед кодировкой). И да - это нехорошее решение. –

-1

Изображения сохраняются в виде 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); 
} 
+1

atleast give действительная причина до того, как кто-то голосует. –