Bạn nói rằng bạn đã xem xét nhiều câu hỏi trực tuyến, nhưng bạn chắc chắn không xem xét điều này hoặc điều này. Theo đúng nghĩa đen, nó đã mất 5 phút để tìm kiếm.
Dù sao đi nữa, nếu tôi là bạn, để giải quyết vấn đề này, tôi sẽ đưa vào finally
mệnh đề khi đóng kết nối. Điều này có nghĩa là bạn sẽ khai báo trình trợ giúp cơ sở dữ liệu của mình dưới dạng biến phiên bản tĩnh và sử dụng mẫu Abstract Factory để đảm bảo thuộc tính singleton.
Cảnh báo của bạn đang xảy ra vì bạn không đảm bảo rằng chỉ có một DatabaseHelper
sẽ luôn tồn tại tại bất kỳ thời điểm nào. Nếu mInstance
đối tượng chưa được khởi tạo, một đối tượng sẽ được tạo. Nếu một cái đã được tạo thì nó sẽ đơn giản được trả lại.
Đây là mã:
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;
}
Nhưng vì bạn nói rằng đóng góp duy nhất của tôi cho câu hỏi của bạn (đã được trả lời trong các bài viết khác) là để cải thiện sự thiếu hụt tiếng Anh sơ cấp của bạn, nên tôi không chắc liệu bạn có thể chấp nhận đây là một câu trả lời thích đáng hay không.