我想从我的sqlite数据库中显示我的customlistview中的图像。我成功转换了一个位图图像数组,并编写了用于转换回位图图像的代码。但是没有显示图像。我正在使用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] );
}
}
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] );
}
答案 0 :(得分:2)
保存您的图片:
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] );
}
答案 1 :(得分:0)
在适配器中尝试获取图像:
byte[] outImage=img[j];
ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
imageview.setImageBitmap(theImage);