在我的应用程序中我有一个数据库,我存储图像,但当我尝试在BitMap中检索图像时,logcat显示OutOfMemoryError。当我从数据库中只检索一个图像时,这个错误不会出现(当我没有&#39 ; t使用do while循环我的代码运行良好)。请帮助我在android中新建。
此类尝试从db:
检索图像class Abc {
ArrayList < ForBitMap > pic;
Abc() {
pic = new Abc < > ();
DataBaseClass objOfDataBaseClass = new DataBaseClass(context);
mCursor = objOfDataBaseClass.showData();
if (mCursor.moveToNext()) {
do {
byte[] mg = null;
mg = mCursor.getBlob(mCursor.getColumnIndex("image"));
Bitmap bitmap = BitmapFactory.decodeByteArray(mg, 0, mg.length);
pic.add(new ForBitMap(bitmap));
} while (mCursor.moveToFirst());
}
}
此类用于存储ArrayList中的值(ArrayList pic;)
class ForBitMap{
Bitmap btmp;
ForBitMap(Bitmap btmp){
this.btmp=btmp;
}
}
logat状态为:
java.lang.OutOfMemoryError: Failed to allocate a 82956 byte allocation with 30836 free bytes and 30KB until OOM
答案 0 :(得分:0)
您可能不应该在数据库中存储位图。只需将它们存储在文件存储中并将文件路径保存在数据库中即可。
答案 1 :(得分:0)
尝试使用LruCache保存图像,如果先前已加载任何位图,则位图会分配内存。使用LruCache,它将使用缓存内存中的密钥保存您的图像。
参考此链接: https://developer.android.com/reference/android/util/LruCache.html