Intereting Posts
Каков правильный способ справиться с устаревшими событиями фрагментов onAttach и onInflate Как динамически устанавливать заголовки в Retrofit (Android) Эффективный цикл через список Java Где останавливать / уничтожать потоки в Android-классе? Каков наиболее подходящий способ хранения пользовательских настроек в приложении Android Android, Как сделать прозрачную строку состояния правильно Android: установить стиль textView во время выполнения Есть ли разница между getLayoutInflater () и .getSystemService (Context.LAYOUT_INFLATER_SERVICE) Android: Получение URI файла из URI контента? SQLite или SharedPreferences для постоянного хранения данных? Показать мягкую клавиатуру для диалога Как обнаружить выход из системы Facebook с Android API v4? Android – Как загрузить приложение HelloWorld на свой телефон? Не показывать Google Play Services версию 15 в SDK Manager (пока) для Google Cast SDK Как получить доступ к файлам Lollipop для файлов Android через NDK?

Можно ли использовать SQLite Cursor после закрытия базы данных?

Прежде всего, исправьте меня, если я ошибаюсь, но если вы закроете соединение с базой данных, вы не сможете использовать курсор, который вы получили от него, правильно?

db.open(); Cursor c = db.query(true, "MyTable", columns, null, null, null, null, null, null); db.close(); // The Cursor is empty now because the db was closed... c.moveToNext(); Log.v(TAG, c.toString(0)); 

Так есть ли способ использовать Курсор после закрытия базы данных? Как есть способ передать его в другом месте и использовать его как объект? Или вы всегда должны оставлять соединение с базой данных открытым до тех пор, пока не закончите курсор?

Solutions Collecting From Web of "Можно ли использовать SQLite Cursor после закрытия базы данных?"

Нет. Как сказано в приведенной ниже ссылке, если вы закрываете базу данных, курсор становится недействительным.

Будет ли курсор еще живым после закрытия базы данных?

Прежде всего, исправьте меня, если я ошибаюсь, но если вы закроете соединение с базой данных, вы не сможете использовать курсор, который вы получили от него, правильно?

Верный.

Так есть ли способ использовать Курсор после закрытия базы данных?

Я так не думаю. Я всегда закрывал базу данных, когда закончил курсор, даже если я передаю курсор другому объекту курсора.

Как есть способ передать его в другом месте и использовать его как объект?

Создать метод, который будет return cursorobject; И используйте метод, где вам это нужно. (Также создайте метод, который закроет db после того, как вы закончите)

Или вы всегда должны оставлять соединение с базой данных открытым до тех пор, пока не закончите курсор?

В противном случае курсор завинчивается.

Я использовал cursor.moveToLast() , и это позволило мне использовать курсор для итерации после закрытия базы данных. Я не знаю, намеренно ли это.

Тем не менее, кажется, что предполагаемое использование открытой вспомогательной структуры заключается в том, чтобы открыть db при запуске активности и закрыть ее, когда Activity будет уничтожена.

В AsyncTask изнутри onCreate () …

 new StartupTask().execute(); 

AsyncTask Thread.sleep () ниже – это просто дать достаточно времени, чтобы показать диалог, чтобы вы могли видеть его работу. Очевидно, вытащите это, когда закончите играть. 😉

 private class StartupTask extends AsyncTask { private ProgressDialog progressDialog; @Override protected Object doInBackground(final Object... objects) { openHelperRef.getWritableDatabase(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPreExecute() { super.onPreExecute(); runOnUiThread(new Runnable() { public void run() { progressDialog = ProgressDialog.show( MyActivity.this, "Title", "Opening/Upgrading the database, please wait", true); } }); } @Override protected void onPostExecute(Object object) { super.onPostExecute(object); progressDialog.dismiss(); } } 

In onDestroy () … openHelper.close ();

В противном случае вы не сможете использовать android SimpleCursorAdapter или что-то в этом роде. Разумеется, в этом вопросе очень не хватает документов andriod. Но, помните, getWriteableDatabase () всегда возвращает одну и ту же кешированную ссылку каждый раз, если вы ее не закрыли. Итак, если вы закрываете эту ссылку волей-неволей, фоновые потоки и то, что нет, которые используют одну и ту же базу данных, умрут.