Ошибка в базе данных, Андроид Студио

У меня есть метод в классе DBHelper (который, где создается база данных), и то, что я хочу сделать в этом методе, состоит в том, чтобы читать данные о таблице и добавлять их к другой таблице, но дает мне следующую ошибку:

01-20 23:51:07.697 5880-5888/? W/SQLiteConnectionPool: A SQLiteConnection      object for database '/data/data/com.google.android.gms/databases/metrics.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
01-20 23:51:07.697 5880-5888/? W/SQLiteConnectionPool: A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/help_responses.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
01-20 23:51:07.697 5880-5888/? W/SQLiteConnectionPool: A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/auto_complete_suggestions.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.

Метод, который я использую, - следующий:

public void añadirErrores(int[] pregMalas) {
    int preg;
    SQLiteDatabase db = getReadableDatabase();
    for (int i = 0; i < pregMalas.length; i++) {
        preg = pregMalas[i];
        Cursor c = db.rawQuery("SELECT * FROM preguntas where id = " + preg, null);
        if (c.moveToFirst()) {
            do {
                SQLiteDatabase dbw = getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("id", c.getInt(0));
                values.put("pregunta", c.getString(1));
                values.put("respuesta_correcta", c.getString(2));
                values.put("respuesta_falsa_1", c.getString(3));
                values.put("respuesta_falsa_2", c.getString(4));
                values.put("recurso", c.getString(5));
                dbw.insert("testErrores", null, values);
                dbw.close();
            } while (c.moveToNext());
        }
    }
    db.close();
}

Я попытался помещения db.close() еще один и два квадратных скобок достигни, но продолжи давать мне ошибку.

2
задан 21.01.2017, 00:58
0 ответов

Закрываешь инстанцию Базы данных, когда ты реализуешь операцию на ней, ты должен закрывать инстанцию, когда ты не займешь ее, это применяется также для курсора.

public void añadirErrores(int[] pregMalas) {
    int preg;
    SQLiteDatabase db = getReadableDatabase();
    SQLiteDatabase dbw = getWritableDatabase();
    for (int i = 0; i < pregMalas.length; i++) {
        preg = pregMalas[i];
        Cursor c = db.rawQuery("SELECT * FROM preguntas where id = " + preg, null);
        if (c.moveToFirst()) {
            do {

                ContentValues values = new ContentValues();
                values.put("id", c.getInt(0));
                values.put("pregunta", c.getString(1));
                values.put("respuesta_correcta", c.getString(2));
                values.put("respuesta_falsa_1", c.getString(3));
                values.put("respuesta_falsa_2", c.getString(4));
                values.put("recurso", c.getString(5));
                dbw.insert("testErrores", null, values);
                //dbw.close();
            } while (c.moveToNext());
        }
          //Cierras cursor
          c.close();
    }
       //Cierras BD.
        dbw.close();
        db.close();
}
2
ответ дан 03.12.2019, 17:35