该代码会从URL中的图像,并转换为一个字节数组工作
byte[] logoImage = getLogoImage(IMAGEURL);
private byte[] getLogoImage(String url){
try {
URL imageUrl = new URL(url);
URLConnection ucon = imageUrl.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(500);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
return baf.toByteArray();
} catch (Exception e) {
Log.d("ImageManager", "Error: " + e.toString());
}
return null;
}
将图像保存到数据库我使用此代码。
public void insertUser(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
String delSql = "DELETE FROM ACCOUNTS";
SQLiteStatement delStmt = db.compileStatement(delSql);
delStmt.execute();
String sql =
"INSERT INTO ACCOUNTS
(account_id,account_name,account_image) VALUES(?,?,?)";
SQLiteStatement insertStmt = db.compileStatement(sql);
insertStmt.clearBindings();
insertStmt.bindString(1, Integer.toString(this.accId));
insertStmt.bindString(2,this.accName);
insertStmt.bindBlob(3, this.accImage);
insertStmt.executeInsert();
db.close();
}
要检索图像,这是我使用的代码。
public Account getCurrentAccount() {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "SELECT * FROM ACCOUNTS";
Cursor cursor = db.rawQuery(sql, new String[] {});
if(cursor.moveToFirst()){
this.accId = cursor.getInt(0);
this.accName = cursor.getString(1);
this.accImage = cursor.getBlob(2);
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
db.close();
if(cursor.getCount() == 0){
return null;
} else {
return this;
}
}
最后到该图像加载到ImageView的
logoImage.setImageBitmap(
BitmapFactory.decodeByteArray( currentAccount.accImage,
0,currentAccount.accImage.length));
好。可能是这个问题。但我不知道该怎么做。任何链接/示例代码都会有帮助。它甚至会因设备而异?它如何发现?谢谢。 – redGREENblue 2011-03-12 12:54:43
http://www.coderanch.com/t/449045/Android/Mobile/byte-image上有一个链接,它使用流而不是缓冲区来获取字节数组。这可能是最简单的方法。 – 2011-03-12 13:12:45
谢谢。将通过这一点。 – redGREENblue 2011-03-12 13:17:23