我在我的应用程序中使用此库作为分段RecyclerView:https://github.com/afollestad/sectioned-recyclerview
这些部分由要显示的对象的标题/名称定义。要填充数据,我从数据库中获取多个游标,将它们返回到List中:
List<String> sectionTitles = new ArrayList<>();
List<Cursor> sectionContent = new ArrayList<>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT title FROM table GROUP BY title", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
String title = cursor.getString(cursor.getColumnIndex("title));
Cursor cursorContent = db.rawQuery("SELECT * FROM table WHERE title = " + title, null);
sectionTitles.add(title);
sectionContent.add(cursorContent);
cursor.moveToNext();
}
cursor.close();
因此对于我使用第一个数组的section-titles,对于第二个数组的行。当我需要一个部分中的行数据时,我会这样调用:
Cursor cursor = sectionContent.get(section);
cursor.moveToPosition(row);
cursor.getString(...);
现在奇怪的是:我从未关闭ArrayList中的一个游标,但有时(1000个活跃用户,每天4-5次)我在调用cursor.moveToPosition(section)
时收到此异常:
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery
将游标存储在列表中是否有问题?或者我错过了什么?任何帮助表示赞赏!