从SQLite数据库中检索时,Android Image不会更改

时间:2014-02-18 09:41:36

标签: android sqlite bitmap android-sqlite

检索图像时检索图像(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));

1 个答案:

答案 0 :(得分:1)

设置imgprofile.invalidate();后尝试拨打imgprofile.setImageBitmap(theImage);。这基本上会重绘ImageView。