tipo - sqlite blob android studio
Cómo almacenar(imagen de mapa de bits) y recuperar la imagen de la base de datos sqlite en Android? (2)
Configurando la base de datos
public class DatabaseHelper extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "database_name";
// Table Names
private static final String DB_TABLE = "table_image";
// column names
private static final String KEY_NAME = "image_name";
private static final String KEY_IMAGE = "image_data";
// Table create statement
private static final String CREATE_TABLE_IMAGE = "CREATE TABLE " + DB_TABLE + "("+
KEY_NAME + " TEXT," +
KEY_IMAGE + " BLOB);";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// creating table
db.execSQL(CREATE_TABLE_IMAGE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// on upgrade drop older tables
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
// create new table
onCreate(db);
}
}
Insertar en la base de datos:
public void addEntry( String name, byte[] image) throws SQLiteException{
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, name);
cv.put(KEY_IMAGE, image);
database.insert( DB_TABLE, null, cv );
}
Recuperando datos :
byte[] image = cursor.getBlob(1);
Nota:
- Antes de insertar en la base de datos, primero debe convertir su imagen de mapa de bits en una matriz de bytes y luego aplicarla mediante la consulta de la base de datos.
- Al recuperar de la base de datos, sin duda tiene una matriz de bytes de imagen, lo que necesita hacer es convertir la matriz de bytes de nuevo a la imagen original. Por lo tanto, debe usar BitmapFactory para decodificar.
A continuación hay una clase de utilidad que espero pueda ayudarlo:
public class DbBitmapUtility {
// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
// convert from byte array to bitmap
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
}
Otras lecturas
Si no está familiarizado con cómo insertar y recuperar en una base de datos, siga este tutorial .
En mi proyecto, necesito almacenar una imagen en una base de datos sqlite y también necesito recuperarla para mostrarla en mi emulador de Android. Cuando lo muestro directamente después de decodificar la cadena codificada, que obtuve de la clase Java usando sockets, la imagen aparece allí. Pero cuando almaceno un código de matriz de bytes de la cadena en la base de datos sqlite con el blob de tipo de datos y luego lo recupero utilizando la función getblob()
, contiene un valor diferente y se produce este error:
JAVA.lang.NULLPointerException: Factory returns null.
Necesito una sugerencia para almacenar una imagen de mapa de bits en una base de datos sqlite y también para recuperarla de la base de datos sqlite.
en el botón, haga clic en escribir esto
Intent in = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
in.putExtra("crop", "true");
in.putExtra("outputX", 100);
in.putExtra("outputY", 100);
in.putExtra("scale", true);
in.putExtra("return-data", true);
startActivityForResult(in, 1);
entonces haz esto en tu actividad
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
Bitmap bmp = (Bitmap) data.getExtras().get("data");
img.setImageBitmap(bmp);
btnadd.requestFocus();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);
byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);
Bitmap bmimage = BitmapFactory.decodeByteArray(bytarray, 0,
bytarray.length);
}
}