OutOfMemoryError:在OOM之前无法分配带有30836个空闲字节和30KB的82956字节分配?

时间:2016-06-16 10:09:05

标签: java android sql sqlite

在我的应用程序中我有一个数据库,我存储图像,但当我尝试在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

2 个答案:

答案 0 :(得分:0)

您可能不应该在数据库中存储位图。只需将它们存储在文件存储中并将文件路径保存在数据库中即可。

答案 1 :(得分:0)

尝试使用LruCache保存图像,如果先前已加载任何位图,则位图会分配内存。使用LruCache,它将使用缓存内存中的密钥保存您的图像。

参考此链接: https://developer.android.com/reference/android/util/LruCache.html