У меня есть следующий код:Как работает курсор SQLite?
public Cursor getListText(String [] cols) {
Cursor cursor = null;
if(cols != null && cols.length > 0) {
openDb(false);
cursor = db.query(true, Contract.Text.TABLE_NAME, cols, null, null, null
, null, null, null);
if(!cursor.moveToFirst()) {
cursor = null;
}
closeDb();
}
return cursor;
}
Cursor возвращаемый getListText(String [] cols)
потребляется SimpleCursorAdapter
, чтобы показать ListView
.
Если я не призываю к cursor.moveToFirst()
Android бросает исключение:
java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
Почему это произошло? Это правда, что это происходит только тогда, когда я закрыть базу данных closeDb();
Если необходимо я придаю SimpleCursorAdapter
реализации:
private void listViewSetup() {
this.listView = (ListView) findViewById(R.id.texts);
CursorAdapterDto cursorAdapterDto = this.presenter.getListTextNames();
Cursor cursor = cursorAdapterDto.getCursor();
Log.v("Cursor Object", DatabaseUtils.dumpCursorToString(cursor));
String [] contractNames = cursorAdapterDto.getContractNames();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.custom_list_item, cursor,
new String [] {"title"}, new int[] {R.id.itemTextView} , 2);
listView.setAdapter(adapter);
if(cursor == null) {
Toast.makeText(this, "No hay textos",
Toast.LENGTH_LONG).show();
}
}
Спасибо за вашу помощь!
EDITED Извините! Я думаю, что я не объяснил вопрос! Я знаю, что мне нужно управлять курсором, прежде чем закрыть базу данных. Я хочу знать, как SimpleCursorAdapter использует курсор. Я имею в виду, если я перейду сначала к курсору и закрою базу данных SimpleCursorAdapter, нарисуйте элементы listView! Но Если я не перехожу к первой и не закрываю базу данных, почему я не могу получить доступ к элементам? Почему содержимое курсора недоступно?