SQLite
 sql >> Database >  >> RDS >> SQLite

Impossibile impedire la perdita di oggetti SQLiteConnection

Dici di aver esaminato molte domande online, ma sicuramente non hai esaminato questo o questo. Sono letteralmente saltati fuori 5 minuti di ricerca.

Ad ogni modo, se fossi in te, per risolvere questo problema, inserirei un finally clausola alla chiusura del collegamento. Ciò significa che dichiareresti il ​​tuo database helper come variabile di istanza statica e utilizzeresti il ​​modello Abstract Factory per garantire la proprietà singleton.

Il tuo avviso si verifica perché non stai assicurando che un solo DatabaseHelper esisterà mai in un dato momento. Se il mInstance l'oggetto non è stato inizializzato, ne verrà creato uno. Se ne è già stato creato uno, verrà semplicemente restituito.

Ecco il codice:

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

Ma dal momento che dici che il mio unico contributo alla tua domanda (a cui era già stata data risposta in altri post) è quello di affinare la tua mancanza di inglese elementare, allora non sono sicuro che tu possa accettare questa come una risposta adeguata.