2010-11-16 10 views
8

¿Cómo almaceno y recupero una matriz de bytes (datos de imagen) desde y hacia una base de datos SQLite en Android?Cómo almacenar y recuperar una matriz de bytes (datos de imagen) desde y hacia una base de datos SQLite?

+3

Si no se realiza nada especial, entonces DB se almacena en la memoria interna del dispositivo. Por lo tanto, obtendrá alrededor de 30-60 MB de espacio libre para usar con su base de datos. Si planea almacenar muchas imágenes de un tamaño normal (varios Mpixels), probablemente debería almacenar imágenes en la tarjeta SD como archivos y poner una ruta de archivo de cadena en su base de datos. –

Respuesta

12

La matriz de bytes se puede almacenar como tipo de datos BLOB. No hay nada especial en este procedimiento, excepto especial cuidado para fragmentación, como:

InputStream is = context.getResources().open(R.drawable.MyImageFile); 
try { 
    byte[] buffer = new byte[CHUNK_SIZE]; 
    int size = CHUNK_SIZE; 
    while(size == CHUNK_SIZE) { 
     size = is.read(buffer); //read chunks from file 
     if (size == -1) break; 

     ContentValues cv = new ContentValues(); 
     cv.put(CHUNK, buffer);  //CHUNK blob type field of your table 

     long rawId = database.insert(TABLE, null, cv); //TABLE table name 
    } 
} catch (Exception e) { 
    Log.e(TAG, "Error saving raw image to: "+rawId, e); 
} 
+0

¿puedes darme un poco más de código para esto? –

+0

@gevorg ¿por qué es necesario fragmentar? – SadeepDarshana

+0

@barmaley ¿Se añaden todos los trozos en un solo blob en un solo registro (es decir, ¿se obtiene un blob final que contiene la imagen completa) o se crean múltiples registros por fragmento? (como en este código) – SadeepDarshana

Cuestiones relacionadas