2016-10-17 9 views
-1

Wie kann ich Bild zu SQLite-Datenbank hinzufügen und dann abrufen? Content Provider mit enter image description hereHinzufügen von Bild zu Sqlite -android-

* i um dieses Bild zu bekommen, die ich aus der Galerie geladen, von Kamera aufgenommen wurde, die in der Datenbank gespeichert werden, in einer anderen Aktivitäten zu nutzen *

+0

Hallo Mohamed, Sie müssen Blobs verwenden. Siehe Antwort unter http://stackoverflow.com/questions/11790104/how-to-storebitmap-image-and-retrieve-image-from-sqlite-database-in-android http://stackoverflow.com/questions/9357668/how-to-speichern-image-in-sqlite-Datenbank –

Antwort

0

Sie könnten den Weg zu den Speichern Bild in der Datenbank. Dann in der nächsten Aktivität, holen Sie es und wenn die Datei existiert es anzeigen ...

Wenn Benutzer Bild aus der Galerie ausgewählt, ich denke, Sie erhalten die URI von onActivityResult(). Sie müssen nur den Pfad dazu mit einem Code wie diesem erhalten:

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

Speichern Sie einfach den Pfad in Ihrer Datenbank, wie Sie wollen.

Später versuchen Sie, die Datei zu erhalten. Wenn die Datei vorhanden ist, aktualisieren Sie Ihre ImageView

File file = new File(savedPath); 
if(file.exists){ 
    // load image in your imageView 
    Bitmap mBitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
    yourImageView.setImageBitmap(mBitmap); 
} 
+0

Oder verwenden Sie eine Codierung wie Base64, aber Antos Antwort ist viel besser. –

+1

@AndriyOmelchenko ist keine gute Idee, den Base64-Code eines Bildes zu behalten, stell dir 5000 Zeichen für ein einzelnes Bild vor? – sioesi

+0

@sioesi Ich wollte nur sagen, dass alle Daten als Text gespeichert werden können (und z. B. gezippt vor dem Kodieren). Und ja - das ist keine gute Lösung. –

-1

Bilder als Blobs in SQLiteDatabase gespeichert sind.

Für ein Bild, um Datenbank Speicher

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

Wo getBytes (Bitmap) wäre:

public static byte[] getBytes(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(CompressFormat.PNG, 0, stream); 
    return stream.toByteArray(); 
} 

während ein Bild aus der Datenbank holen:

if(cursor.getBlob(3)!=null) 
    { 
      contact.setImage(Utility.getPhoto(cursor.getBlob(3)); 
    } 
    else 
    { 
     contact.setImage(null); 
    } 

Und getPhoto (BLOB) wäre:

// convert from byte array to bitmap 
public static Bitmap getPhoto(byte[] image) { 
    return BitmapFactory.decodeByteArray(image, 0, image.length); 
} 
+1

Atleast geben ein gültiger Grund, bevor jemand abstimmt. –

Verwandte Themen