una tipo studio que imagen guardar datos campo android image sqlite bitmapimage

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:

  1. 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.
  2. 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); } }