Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to store(bitmap image) and retrieve image from sqlite database in android? [closed]

In my project I need to store an image into a sqlite database and also need to retrieve it to show in my android emulator. When I show it directly after decoding the encoded string, which I got from Java class using sockets, the image displays there. But when I store a byte array code of the string into the sqlite database with the datatype blob and then again retrieve it by using the getblob() function it contains a different value and this error occurs:

JAVA.lang.NULLPointerException: Factory returns null. 

I need a suggestion to store a bitmap image into a sqlite database and also to retrieve it from the sqlite database.

like image 489
Rahul Gautam Avatar asked Aug 03 '12 05:08

Rahul Gautam


People also ask

How do I store images in SQLite database?

Inorder to store images to android SQLite database, you need to convert the image uri to bitmap then to binary characters that is, bytes[] sequence. Then set the table column data type as BLOB data type. After retrieving the images from DB, convert the byte[] data type to bitmap in order to set it to imageview.

How retrieve data from SQLite database Android and display it in a table?

We can retrieve anything from database using an object of the Cursor class. We will call a method of this class called rawQuery and it will return a resultset with the cursor pointing to the table. We can move the cursor forward and retrieve the data. This method return the total number of columns of the table.

How do I save a bitmap database?

If you have Bitmap image then you can do following. Bitmap photo = <Your image> ByteArrayOutputStream bos = new ByteArrayOutputStream(); photo. compress(Bitmap. CompressFormat.


1 Answers

Setting Up the database

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

Insert in the Database:

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

Retrieving data:

 byte[] image = cursor.getBlob(1); 

Note:

  1. Before inserting into database, you need to convert your Bitmap image into byte array first then apply it using database query.
  2. When retrieving from database, you certainly have a byte array of image, what you need to do is to convert byte array back to original image. So, you have to make use of BitmapFactory to decode.

Below is an Utility class which I hope could help you:

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


Further reading
If you are not familiar how to insert and retrieve into a database, go through this tutorial.

like image 185
Lazy Ninja Avatar answered Sep 24 '22 20:09

Lazy Ninja