I want to show images in my customlistview from my sqlite database.I successfully converted an array of bitmap images,and wrote code for converting back to bitmap images.But images are not showing off.I am using SqliteDatabaseHelper class to insert images to database.All other values except images are displaying.What value should I insert??Please help
MainActivity.java
public class MainActivity extends Activity{
ListView prd_list;
public static Integer clas;
byte [] imge;
int j;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prd_list = (ListView) findViewById(R.id.list);
DataBaseHandler dbh = new DataBaseHandler(this);
/////////converting image to bytearray//////
Bitmap[] images = { BitmapFactory.decodeResource(getResources
(),R.drawable.candle1),BitmapFactory.decodeResource(getResources
(),R.drawable.candl3),BitmapFactory.decodeResource(getResources(),R.drawable.lawn)};
byte[][] img = new byte[images.length][];
for (j=0; j<images.length; j++) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
images[j].compress(Bitmap.CompressFormat.PNG, 100, bos);
img[j] = bos.toByteArray();
}
//////////////////////////////////////
SQLiteDatabase db = dbh.getWritableDatabase();
Cursor cr = db.rawQuery("SELECT * FROM product", null);
final String[] pname = new String[cr.getCount()];
String[] price = new String[cr.getCount()];
int i = 0;
j=0;
while(cr.moveToNext())
{
String name = cr.getString(cr.getColumnIndex("pname"));
String prprice = cr.getString(cr.getColumnIndex("pprice"));
imge=cr.getBlob(cr.getColumnIndex("pimage"));
img[j] = imge;
pname[i] = name;
price[i] = prprice;
i++;
j++;
}
ListAdapter adapter = new ListAdapter(this, img,pname, price);
prd_list.setAdapter(adapter);
}
ListAdapter.java
public class ListAdapter extends BaseAdapter {
private final String[] pname;
private final String[] price;
private final byte[] []img;
int j=0;
private Context mcontext;
public ListAdapter(Context c,byte[][]img,String[] pname,String[] price){
mcontext=c;
this.pname=pname;
this.price=price;
this.img=img;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return pname.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View List;
LayoutInflater mLayoutinflater=(LayoutInflater) mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView==null){
List=new View(mcontext);
List=mLayoutinflater.inflate(R.layout.mylist, parent, false);
}
else{
List = (View)convertView;
}
TextView textView1 = (TextView)List.findViewById(R.id.pr_name);
TextView textView2 = (TextView)List.findViewById(R.id.pr_price);
ImageView imageview= (ImageView)List.findViewById(R.id.pr_img);
textView1.setText(pname[position].toString());
textView2.setText("Rs "+price[position] +" /-");
if(img.length>0){
Bitmap b1=BitmapFactory.decodeByteArray(img[j], 0, img[j].length);
imageview.setImageBitmap(b1);
}
// TODO Auto-generated method stub
return List;
}
}
DataBaseHandler.java
public class DataBaseHandler extends SQLiteOpenHelper{
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "products.db";
public static final String CONTACTS_TABLE_NAME = "product";
public static final String CONTACTS_COLUMN_ID = "pid";
public static final String CONTACTS_COLUMN_NAME = "pname";
public static final String CONTACTS_COLUMN_EMAIL = "pspec";
public static final String CONTACTS_COLUMN_STREET = "pprice";
public static final String CONTACTS_COLUMN_CITY = "pfeature";
public static final String CONTACTS_COLUMN_PHONE = "pimage";
public DataBaseHandler(Context context) {
super(context, DATABASE_NAME, null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE IF NOT EXISTS product(pimage BLOB,pid INTEGER PRIMARY KEY,pname TEXT,pprice NUMERIC,pspec TEXT,pfeature TEXT)");
db.execSQL("INSERT INTO product(pimage,pname,pprice,pspec) VALUES('img[0]','Candle stick 1',4000,'Solar garden / pathway light,Solar Panel:1pc crystal silicon solar cell, Battery:1pc 1.2V Ni-MH/Ni-CD AA battery 600MA ,Material:Stainless steel ,WaterProof and safe ')");
db.execSQL("INSERT INTO product(pimage,pname,pprice,pspec) VALUES('img[1]','Candle stick 3','4500','Solar garden / pathway light, Solar Panel:1pc crystal silicon solar cell, Battery:1pc 1.2V Ni-MH/Ni-CD AA battery 600MA, Material:Stainless steel, WaterProof and safe IP44 ')");
db.execSQL("INSERT INTO product(pimage,pname,pprice,pspec) VALUES('img[6]','Senson',4500,'Solar garden / pathway light, Solar Panel:1pc crystal silicon solar cell, Battery:1pc 1.2V Ni-MH/Ni-CD AA battery 600MA, Material:Stainless steel, WaterProof and safe IP44 ')");
db.execSQL("INSERT INTO product(pimage,pname,pprice,pspec) VALUES('img[7]','Thejus',7500,'Solar garden / pathway light, Solar Panel:1pc crystal silicon solar cell, Battery:1pc 1.2V Ni-MH/Ni-CD AA battery 600MA, Material:Stainless steel, WaterProof and safe IP44 ')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public void addEntry( byte[] image) throws SQLiteException{
SQLiteDatabase products = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("pimage", image);
products .insert( CONTACTS_TABLE_NAME, null, cv );
}
public void addEntries(byte[][] img) {
for(int i = 0 ; i < img.length ; i++)
addEntry(img[i] );
}
}
EDITED
public void addEntry( byte[] image) throws SQLiteException{
SQLiteDatabase products = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("pimage", image);
products .insert( CONTACTS_TABLE_NAME, null, cv );
}
public void addEntries(byte[][] img) {
for(int i = 0 ; i < img.length ; i++)
addEntry(img[i] );
}