sql >> Base de Datos >  >> RDS >> SQLite

No se puede evitar la fuga de objetos de SQLiteConnection

Dices que investigaste muchas preguntas en línea, pero definitivamente no investigaste esto o esto. Literalmente apareció a los 5 minutos de búsqueda.

De todos modos, si yo fuera usted, para resolver este problema, incluiría un finally cláusula al cerrar la conexión. Esto significa que estaría declarando su asistente de base de datos como una variable de instancia estática y usaría el patrón Abstract Factory para garantizar la propiedad singleton.

Su advertencia está sucediendo porque no se está asegurando de que solo un DatabaseHelper alguna vez existirá en un momento dado. Si la mInstance objeto no se ha inicializado, se creará uno. Si ya se ha creado uno, simplemente se devolverá.

Aquí está el código:

public ArrayList<ItemSubject> loadDataSubject() {
    ArrayList<ItemSubject> arrayList = new ArrayList<>();
    String select = "select * from " + TABLE_SUBJECT;
    Cursor cursor = getData(select);
    
    
    if (cursor != null && cursor.getCount() > 0) {
    try {
        cursor.moveToFirst();
            for (int i = 0; i < cursor.getCount(); i++) {
                String id = cursor.getString(cursor.getColumnIndex(TAG_ID));
                String course = cursor.getString(cursor.getColumnIndex(TAG_COURSE_NAME));
         ....
                ItemSubject objItem = new ItemSubject(id, courseId,...);
                arrayList.add(objItem);
                cursor.moveToNext();
           }
       finally {
           if (cursor != null)
           cursor.close();
       }
   }
   return arrayList;
}    

Pero dado que dices que mi única contribución a tu pregunta (que ya había sido respondida en otras publicaciones) es refinar tu falta de inglés elemental, entonces no estoy tan seguro de que puedas aceptar esto como una respuesta adecuada.