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.