2010-02-15 31 views
5

当我从sqlite数据库中检索图像时,我的位图对象bm返回空值,任何人都可以帮助我..?Android:从数据库检索位图的问题

我发现在我的数据库的问题..

当我存储字节数组中的BLOB数据类型的数据库表时,位的数组的大小是2280 ..

但是,当我检索到使用select查询BLOB数据类型我得到的尺寸范围内的字节数组12

我的代码是:

// Inserting data in database 
byte[] b; 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.icon); 
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object 
b = baos.toByteArray(); 
//here b size is 2280 
baos.close(); 
try 
{ 
mDB = this.openOrCreateDatabase(MY_DATABASE_NAME, MODE_PRIVATE, null); 
mDB.execSQL("CREATE TABLE IF NOT EXISTS " 
+ MY_DATABASE_TABLE 
+ " (PICTURE BLOB);");  
mDB.execSQL("INSERT INTO " 
+ MY_DATABASE_TABLE 
+ " (PICTURE)" 
+ " VALUES ('"+b+"');"); 

} 
catch(Exception e) 
{ 
Log.e("Error", "Error", e); 
} 

finally 
{ 
if(mDB != null) 
mDB.close(); 
} 


// Retriving data from database 
byte[] b1; 
Bitmap bm; 
mDB = this.openOrCreateDatabase(MY_DATABASE_NAME, MODE_PRIVATE, null); 
try { 
mDB.execSQL("CREATE TABLE IF NOT EXISTS " 
+ MY_DATABASE_TABLE 
+ " (PICTURE BLOB);"); 

Cursor c = mDB.rawQuery("SELECT * FROM " + MY_DATABASE_TABLE + ";", null); 
c.moveToFirst(); 
if (c != null) { 
do { 
b1=c.getBlob(0)); //here b1 size is 12 
bm=BitmapFactory.decodeByteArray(b1, 0, b1.length); 
}while(c.moveToNext()); 
} 
+0

同样的问题! 你有没有找到解决方案? – 2010-06-23 11:02:33

回答

10

以下是我写的DAT之前编码图像ABASE:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
mBitmap.compress(Bitmap.CompressFormat.JPEG, THUMB_QUALITY, outputStream); 
mByteArray = outputStream.toByteArray(); // write this to database as blob 

然后就像从游标对其进行解码:这里

ByteArrayInputStream inputStream = new ByteArrayInputStream(cursor.getBlob(columnIndex)); 
Bitmap mBitmap = BitmapFactory.decodeStream(inputStream);