Android – Вставка растрового массива изображений в базу данных SQLite

Я хочу показать изображения в своем списке customlist из моей базы данных sqlite. Я успешно преобразовал массив растровых изображений и написал код для преобразования обратно в растровые изображения. Но изображения не отображаются. Я использую класс SqliteDatabaseHelper для вставки изображений в базу данных. Отображаются все другие значения, кроме изображений. Какое значение следует вставлять? Пожалуйста, помогите

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

РЕДАКТИРОВАНИЕ

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

Сохраните свои изображения следующим образом:

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

Попробуйте это в своем адаптере, чтобы получить изображение:

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