4

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] );
}
3
  • db.execSQL("INSERT INTO product(pimage,pname,pprice,pspec) VALUES('img[0]' where is img[0] ? Commented Feb 6, 2015 at 4:31
  • my image array is img [ j ] . I tried to access each image using their indexex like img[0],img[1]... Commented Feb 6, 2015 at 4:33
  • check this question :stackoverflow.com/questions/11790104/… Commented Feb 6, 2015 at 4:36

2 Answers 2

2

save your images like this :

public void addEntry( String name, byte[] image) throws SQLiteException{
    ContentValues cv = new  ContentValues();
    cv.put(KEY_NAME,    name);
    cv.put(KEY_IMAGE,   image);
    database.insert( DB_TABLE, null, cv );
}

public void addEntries(String[] name , byte[][] img) {
    for(int i = 0 ; i < name.length ; i++) 
        addEntry(name[i] , img[i] );
}
Sign up to request clarification or add additional context in comments.

4 Comments

@droid inside your DataBaseHandler class.
I am not familiar with this sqlite open class.I updated your answer in my code.Is that correct? and My database and table name cannot be resolved.showing an error.
change your code ,add : SQLiteDatabase products = getWritableDatabase(); and chnge this line products.insert( product, null, cv ); to :products.insert( CONTACTS_TABLE_NAME, null, cv );
Still not showing my images.I have updated my code as EDITED.Is there any error? .In for loop ,Is that img.length o image.length ?
0

try this in Your adapter to get the image :

byte[] outImage=img[j];
ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
imageview.setImageBitmap(theImage);

3 Comments

did you add imageview.setImageBitmap(theImage); at the end ?
fist do u get any errors ? and do u have a problem with other database entries ?
Not getting any errors and no problem with other entries.Everything works fine except images

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.