SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Não foi possível evitar o vazamento de objeto SQLiteConnection


Você diz que pesquisou muitas perguntas online, mas definitivamente não pesquisou isso ou aquilo. Ele literalmente surgiu 5 minutos em busca.

De qualquer forma, se eu fosse você, para resolver esse problema, incluiria um finally cláusula ao fechar a conexão. Isso significa que você declararia seu auxiliar de banco de dados como uma variável de instância estática e usaria o padrão Abstract Factory para garantir a propriedade singleton.

Seu aviso está acontecendo porque você não está garantindo que apenas um DatabaseHelper jamais existirá a qualquer momento. Se a mInstance objeto não foi inicializado, um será criado. Se um já tiver sido criado, ele será simplesmente devolvido.

Aqui está o 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;
}    

Mas como você diz que minha única contribuição para sua pergunta (que já foi respondida em outros posts) é refinar sua falta de inglês elementar, então não tenho certeza se você pode aceitar isso como uma resposta adequada.