检索图像时检索图像(Blob)的另一个问题是显示,如果我将图像从数据库记录更改为另一个图像,之前的图像将是现金不会更改为新图像。 。! 数据库表:
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS student(" +
"Sid INTEGER PRIMARY KEY AUTOINCREMENT, " +
"firstName TEXT, " +
"lastName TEXT, " +
"photo BLOB, " +
"book TEXT)";
db.execSQL(sql);
}
手动插入一些数据
ContentValues values = new ContentValues();
values.put("firstName", "Roza");
values.put("lastName", "Jack");
// profile picture of sudent
values.put("photo", convertimg(R.drawable.sudent_1));
values.put("book", "Andriod programming");
db.insert("student", "book", values);
将方法图像转换为BLOB
public static byte[] convertimg(int drawimg)
{
Bitmap bitmap = BitmapFactory.decodeResource(myresurse, drawimg);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100 , bos);
byte[] bitmapdata = bos.toByteArray();
return bitmapdata;
}
并检索图像并设置为imageview。
db = (new DatabaseHelper(this)).getWritableDatabase();
Cursor cur=db.rawQuery("select firstname || ' ' || lastname as fullname,book,photo from student where Sid=1" , null);
cur.moveToNext();
ImageView imgprofile = (ImageView) findViewById(R.id.studentphoto);
byte[] mybyte=cur.getBlob(cur.getColumnIndex("photo"));
ByteArrayInputStream imageStream = new ByteArrayInputStream(mybyte);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
imgprofile.setImageBitmap(theImage);
imgprofile.invalidate();
如果我想改变以前的图像,我的大问题就在这里
values.put("photo", convertimg(R.drawable.sudent_1));
到像第二张图像这样的图像不会显示第一张图像
values.put("photo", convertimg(R.drawable.sudent_2));
答案 0 :(得分:1)
设置imgprofile.invalidate();
后尝试拨打imgprofile.setImageBitmap(theImage);
。这基本上会重绘ImageView。