Hello Friends,
Today I am going to share very important example for how to save Image and text in Sq-lite database and how to display it in a List-view. Steps and code are given below please follow-
1- Create a new Project name e.g.- SQLiteImageDemo.
2- Create a DataBaseHandler class and create database.
3-Create a SQLiteDemoActivity and call DatabaseHandler class for insert and get data from database.
4- Create a Contact class.
4- Create a ContactImageAdapter class for create custom ListView.
5-Add ListView in main.xml file.
6-Create a xml file for add Image and Text.
a) Print Screen:
b)DataBaseHandler.java
package
com.manish.sqlite;
import
java.util.ArrayList;
import
android.content.ContentValues;
import
android.content.Context;
import
android.database.Cursor;
import
android.database.sqlite.SQLiteDatabase;
import
android.database.sqlite.SQLiteOpenHelper;
public
class
DataBaseHandler extends
SQLiteOpenHelper {
private
static
final
int
DATABASE_VERSION
= 1;
private
static
final
String DATABASE_NAME
= "imagedb";
private
static
final
String TABLE_CONTACTS
= "contacts";
//
Contacts Table Columns names
private
static
final
String KEY_ID
= "id";
private
static
final
String KEY_NAME
= "name";
private
static
final
String KEY_IMAGE
= "image";
public
DataBaseHandler(Context context) {
super(context,
DATABASE_NAME,
null,
DATABASE_VERSION);
public
void
onCreate(SQLiteDatabase db) {
String
CREATE_CONTACTS_TABLE = "CREATE
TABLE " + TABLE_CONTACTS
+ "("
+
KEY_ID
+ " INTEGER PRIMARY KEY,"
+ KEY_NAME
+ " TEXT,"
+
KEY_IMAGE
+ " BLOB"
+ ")";
db.execSQL(CREATE_CONTACTS_TABLE);
public
void
onUpgrade(SQLiteDatabase db, int
oldVersion, int
newVersion) {
//
Drop older table if existed
db.execSQL("DROP
TABLE IF EXISTS " +
TABLE_CONTACTS);
* All CRUD(Create, Read, Update, Delete) Operations
public//
Adding new contact
void
addContact(Contact contact) {
SQLiteDatabase
db = this.getWritableDatabase();
ContentValues
values = new
ContentValues();
values.put(KEY_NAME,
contact._name);
// Contact Name
values.put(KEY_IMAGE,
contact._image);
// Contact Phone
db.insert(TABLE_CONTACTS,
null,
values);
db.close();
// Closing database connection
//
Getting single contact
Contact
getContact(int
id) {
SQLiteDatabase
db = this.getReadableDatabase();
Cursor
cursor = db.query(TABLE_CONTACTS,
new
String[] { KEY_ID,
KEY_NAME,
KEY_IMAGE
}, KEY_ID
+ "=?",
new
String[] { String.valueOf(id)
}, null,
null,
null,
null);
Contact
contact = new
Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getBlob(1));
public
List<Contact> getAllContacts() {
List<Contact>
contactList = new
ArrayList<Contact>();
String
selectQuery = "SELECT * FROM
contacts ORDER BY name";
SQLiteDatabase
db = this.getWritableDatabase();
Cursor
cursor = db.rawQuery(selectQuery, null);
//
looping through all rows and adding to list
if
(cursor.moveToFirst()) {
Contact
contact = new
Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setImage(cursor.getBlob(2));
//
Adding contact to list
contactList.add(contact);
}
while
(cursor.moveToNext());
//
close inserting data from database
//
Updating single contact
public
int
updateContact(Contact contact) {
SQLiteDatabase
db = this.getWritableDatabase();
ContentValues
values = new
ContentValues();
values.put(KEY_NAME,
contact.getName());
values.put(KEY_IMAGE,
contact.getImage());
return
db.update(TABLE_CONTACTS,
values, KEY_ID
+ " = ?",
new
String[] { String.valueOf(contact.getID())
});
//
Deleting single contact
public
void
deleteContact(Contact contact) {
SQLiteDatabase
db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS,
KEY_ID
+ " = ?",
new
String[] { String.valueOf(contact.getID())
});
//
Getting contacts Count
public
int
getContactsCount() {
String
countQuery = "SELECT * FROM "
+ TABLE_CONTACTS;
SQLiteDatabase
db = this.getReadableDatabase();
Cursor
cursor = db.rawQuery(countQuery, null);
return
cursor.getCount();
c)SQLiteDemoActivity.java
package
com.manish.sqlite;
import
java.io.ByteArrayOutputStream;
import
java.util.ArrayList;
import
android.app.Activity;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.os.Bundle;
import
android.widget.ListView;
public
class
SQLiteDemoActivity extends
Activity {
ArrayList<Contact>
imageArry =
new
ArrayList<Contact>();
ContactImageAdapter
adapter;
/**
Called when the activity is first created. */
public
void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DataBaseHandler
db = new
DataBaseHandler(this);
//
get image from drawable
Bitmap
image = BitmapFactory.decodeResource(getResources(),
//
convert bitmap to byte
ByteArrayOutputStream
stream = new
ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,
100, stream);
byte
imageInByte[] = stream.toByteArray();
Log.d("Insert:
", "Inserting
..");
db.addContact(new
Contact("FaceBook",
imageInByte));
//
display main List view bcard
and contact name
//
Reading all contacts from database
List<Contact>
contacts = db.getAllContacts();
for
(Contact cn : contacts) {
String
log = "ID:"
+ cn.getID() + " Name: "
+ cn.getName()
+
" ,Image: "
+ cn.getImage();
//
Writing Contacts to log
//add
contacts data in arrayList
adapter
= new
ContactImageAdapter(this,
R.layout.screen_list,
ListView
dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);
package
com.manish.sqlite;
public
Contact(int
keyId, String name, byte[]
image) {
public
Contact(String name, byte[]
image) {
public
void
setID(int
keyId) {
public
String getName() {
public
void
setName(String name) {
public
byte[]
getImage() {
public
void
setImage(byte[]
image) {
e)ContactImageAdapter.java
package
com.manish.sqlite;
import
java.io.ByteArrayInputStream;
import
java.util.ArrayList;
import
android.app.Activity;
import
android.content.Context;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.ArrayAdapter;
import
android.widget.ImageView;
import
android.widget.TextView;
public
class
ContactImageAdapter extends
ArrayAdapter<Contact>{
ArrayList<Contact> data=new
ArrayList<Contact>();
public
ContactImageAdapter(Context context, int
layoutResourceId, ArrayList<Contact> data) {
super(context,
layoutResourceId, data);
this.layoutResourceId
= layoutResourceId;
public
View getView(int
position, View convertView, ViewGroup parent) {
ImageHolder holder = null;
LayoutInflater inflater =
((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId,
parent, false);
holder = new
ImageHolder();
holder.txtTitle
= (TextView)row.findViewById(R.id.txtTitle);
holder.imgIcon
= (ImageView)row.findViewById(R.id.imgIcon);
holder = (ImageHolder)row.getTag();
Contact picture = data.get(position);
holder.txtTitle.setText(picture ._name);
//convert byte to bitmap take
from contact class
byte[]
outImage=picture._image;
ByteArrayInputStream imageStream = new
ByteArrayInputStream(outImage);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
holder.imgIcon.setImageBitmap(theImage);
<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.55"
>
<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:id="@+id/imgIcon"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="0.71"
android:gravity="center_vertical"
/>
android:id="@+id/txtTitle"
android:layout_width="80dp"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_marginLeft="7dp"
/>