SQLite
 sql >> Base de données >  >> RDS >> SQLite

Impossible d'empêcher la fuite d'objet SQLiteConnection

Vous dites que vous avez examiné de nombreuses questions en ligne, mais vous n'avez certainement pas examiné ceci ou cela. Il a littéralement surgi après 5 minutes de recherche.

Quoi qu'il en soit, si j'étais vous, pour résoudre ce problème, j'inclurais un finally clause lors de la fermeture de la connexion. Cela signifie que vous déclareriez votre assistant de base de données en tant que variable d'instance statique et utiliseriez le modèle Abstract Factory pour garantir la propriété singleton.

Votre avertissement se produit parce que vous ne vous assurez pas qu'un seul DatabaseHelper existera jamais à un moment donné. Si la mInstance objet n'a pas été initialisé, un sera créé. Si un a déjà été créé, il sera simplement renvoyé.

Voici le code :

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;
}    

Mais puisque vous dites que ma seule contribution à votre question (à laquelle il avait déjà été répondu dans d'autres messages) est de raffiner votre manque d'anglais élémentaire, alors je ne suis pas sûr que vous puissiez accepter cela comme une réponse adéquate.