search

Home  >  Q&A  >  body text

java - 安卓Sqlite数据库内存溢出

错误日志如下:
2016-09-30 01:29:59 E/IMemory ( 1187): cannot map BpMemoryHeap (binder=0xbecdfee8), size=462848, fd=74 (Out of memory)

2016-09-30 01:29:59 F/libc ( 1187): Fatal signal 11 (SIGSEGV) at 0xffffffff (code=1), thread 1199 (Binder_2)

2016-09-30 01:29:59 E/CursorWindow( 1187): Could not allocate CursorWindow '/data/data/../**.db' of size 2097152 due to error -1
2.
2016-09-30 01:29:59 E/getDataNums( 1187): Cursor window allocation of 2048 kb failed.

代码如下:

SQLiteDatabase db = dbOpenHelper.getReadableDatabase();

    List<KidListModel> kidList=new ArrayList<>();
    if(db.isOpen()) {
        Cursor cursor = null;
        try {
            if (TextUtils.isEmpty(CurClassId)) {
                cursor = db.query("KidList", null, null, null, null, null, null);
            } else {
                cursor = db.query("KidList", null, "class_id = ?", new String[]{CurClassId}, null, null, null);
            }
            if (cursor.moveToFirst()) {
                do {
                    KidListModel kid = new KidListModel();
                    kid.setId(cursor.getString(cursor.getColumnIndex("kid")));
                    kid.setName(cursor.getString(cursor.getColumnIndex("name")));
                    kid.setSafe_gate_pic(cursor.getString(cursor.getColumnIndex("safe_gate_pic")));
                    kid.setClass_id(CurClassId);
                    kidList.add(kid);
                } while (cursor.moveToNext());
            }
        } catch (Exception e) {
            Log.e("loadClassKids", e.getMessage());
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }
    return kidList;

sqlite已经有单例化:
public synchronized static SignDataBase getInstance(Context context){

    if (signDataBase == null){
        signDataBase = new SignDataBase(context);
    }
    return signDataBase;
}
怪我咯怪我咯2770 days ago998

reply all(1)I'll reply

  • ringa_lee

    ringa_lee2017-04-18 10:06:59

    finally {
                if (cursor != null) {
                    cursor.close();
                }
                // 加上以下程式:
                if (db != null) {
                    db.close();
                }
            }

    reply
    0
  • Cancelreply