2013-06-19 1 views
1

J'essaie d'enregistrer une photo en tant que blob dans le SQLite (pas seulement référence). mCurrentMediaPath est le chemin actuel où la photo sera stockée. Maintenant, je dois l'enregistrer dans la base de données après la prise de vue et appuyer sur le bouton de sauvegarde (je suppose après l'intention).Comment enregistrer une photo dans la base de données android en tant que blob

public Uri insert(byte[] image) { 
    return getContentResolver().insert(MyContentProvider.CONTENT_URI7, createContentValues(image)); 
} 
private ContentValues createContentValues(byte[] image) { 
    ContentValues docsInsert = new ContentValues(); 
    docsInsert.put(Db.COLUMN_FILETYPE, "PHOTO"); 
    docsInsert.put(Db.COLUMN_NAME, mCurrentMediaPath); 
    docsInsert.put(Db.COLUMN_FILE, image); 
    return docsInsert; 
} 
// convert from bitmap to byte array 
public byte[] getBytesFromBitmap(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(CompressFormat.JPEG, 70, stream); 
    return stream.toByteArray(); 
} 


private void dispatchMediaIntent(int actionCode) { 
    switch(actionCode) { 
    case ACTION_TAKE_PHOTO: 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File f = null; 
     try { 
      f = setUpPhotoFile(ACTION_TAKE_PHOTO); 
      mCurrentMediaPath = f.getAbsolutePath(); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      f = null; 
      mCurrentMediaPath = null; 
     } 
     startActivityForResult(takePictureIntent, actionCode); 
     break; 
    case ACTION_TAKE_VIDEO: 
     Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     startActivityForResult(takeVideoIntent, actionCode); 
     break; 
    default: 
     break;   
    }  
} 

Où dois-je implémenter l'insertion?

 //SAVING TO DATABASE 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(mCurrentMediaPath, bmOptions); 
     Bitmap bitmap = BitmapFactory.decodeFile(mCurrentMediaPath, bmOptions); 

     insert(getBytesFromBitmap(bitmap)); 
+0

stocker le chemin de l'image dans la base de données au lieu de stocker l'image blob – Raghunandan

+0

S'il vous plaît lire la première ligne de mon poste. – user2224135

+0

si vous avez un grand nombre d'images en stockant dans la base de données occupe plus d'espace. Au lieu de cela, vous pouvez stocker le chemin de l'image. – Raghunandan

Répondre

1

Créer bitmap de l'image puis

Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, null); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

dba.open(); 

dba.insertPhoto(byteArray); 

où dba est objet de la classe de base de données.

créer la table dans la classe de base de données comme:

private static final String CREATETABLE_PHOTO = "create table eqpphoto("EImage BLOB " + ");"; 

public static final String TABLE_PHOTO = "eqpphoto"; 

public long insertPhoto(byte[] EImage) { 

    try { 
     System.out.println("Function call : "); 
     ContentValues values = new ContentValues(); 

     values.put(EIMAGE, EImage); 
     return db.insert(TABLE_PHOTO, null, values); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return 0; 
    } 
} 
+0

Comment avez-vous déclaré "bmp"? – user2224135

+0

vérifier ma réponse éditée .. – Riser

+0

En ce qui concerne le plus, où dans la méthode "dispatchMediaIntent" l'implémenteriez-vous? Comme la variable Bitmap revient toujours nulle. – user2224135

Questions connexes