У меня проблема с закрытием курсора в моем классе SQLite.Когда я закрою Курсор и SQLiteDatabase
в блоке finally (в DBHelper
), я не могу прочитать данные в моем другом классе (Невозможно повторно открыть ошибку закрытого Курсора), но когда я не закрываю Курсор и SQLiteDatabase
тогда у меня есть ошибки утечки памяти.
DHHelper.java:
//...
public Cursor selectData(String selectVal, String tabName){
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = null;
try {
String areaTyp = "SELECT " + selectVal + " FROM " + tabName;
c = db.rawQuery(areaTyp, null);
return c;
} finally {
c.close();
db.close();
}
}
//...
UserMenager.java
public List<UserModel> getUsersList(){
List<UserModel> allUsers = new ArrayList<UserModel>();
final DBHelper db = new DBHelper(appStatic.CONTEX);
Cursor c = db.selectData("*","User");
if (c.moveToFirst()) {
while (!c.isAfterLast()) {
allUsers.add(new UserModel(c.getString(c.getColumnIndex("cms_id")),
c.getString(c.getColumnIndex("login")),
c.getString(c.getColumnIndex("name")),
c.getString(c.getColumnIndex("active")),
c.getString(c.getColumnIndex("avatar")),
c.getString(c.getColumnIndex("gtoken"))));
c.moveToNext();
}
}
c.close();
db.close();
return allUsers;
}
Может быть, я должен сделать это по-другому, и функциячто возвращает курсор это плохая идея?
РЕДАКТИРОВАНИЕ: Когда я запускаю приложение, у меня появляется ошибка:
java.lang.IllegalStateException: попытка повторно открыть уже закрытый объект: SQLiteQuery: SELECT * FROM User
В UserMenager.java, строка
if (c.moveToFirst()) {