SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Das Lecken des SQLiteConnection-Objekts kann nicht verhindert werden

Sie sagen, Sie haben sich online mit vielen Fragen beschäftigt, aber definitiv nicht mit diesem oder jenem. Es tauchte buchstäblich 5 Minuten nach der Suche auf.

Wie auch immer, wenn ich Sie wäre, würde ich zur Lösung dieses Problems einen finally einfügen Klausel beim Schließen der Verbindung. Das bedeutet, dass Sie Ihr Datenbankhilfsprogramm als statische Instanzvariable deklarieren und das Abstract-Factory-Muster verwenden würden, um die Singleton-Eigenschaft zu garantieren.

Ihre Warnung erfolgt, weil Sie nicht sicherstellen, dass nur ein DatabaseHelper wird es jemals zu einem bestimmten Zeitpunkt geben. Wenn die mInstance Objekt nicht initialisiert wurde, wird eines erstellt. Wenn bereits eine erstellt wurde, wird sie einfach zurückgegeben.

Hier ist der 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;
}    

Aber da Sie sagen, dass mein einziger Beitrag zu Ihrer Frage (die bereits in anderen Beiträgen beantwortet wurde) darin besteht, Ihren Mangel an elementaren Englischkenntnissen zu verfeinern, bin ich mir nicht sicher, ob Sie dies als angemessene Antwort akzeptieren können.