Я читал через stackoverflow об этом вопросе, и я до сих пор не нашел решения. Я заметил, что иногда приложение меняет эту ошибку:
java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:962)
at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:599)
at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:348)
at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:894)
...
У меня есть файл DatabaseHelper.java, используя этот подход, чтобы получить его экземпляр:
public static DatabaseHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new DatabaseHelper(context.getApplicationContext());
}
return mInstance;
}
Тогда у меня есть такие методы, как этот (что он разбился в строке cursor.moveToFirst() с этой ошибкой). Он почти никогда не падает, но иногда это происходит.
public Profile getProfile(long id) {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_PROFILES + " WHERE " + KEY_PROFILES_ID + " = " + id;
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
Profile profile = new Profile();
if (cursor.moveToFirst()) {
doWhatEver();
}
cursor.close();
db.close();
return profile;
}
Чтобы он использовал все методы, которые я использую:
SQLiteDatabase db = this.getReadableDatabase(); (or Writable)
И затем я закрываю курсор и db. В этом случае ошибка попала в строку:
cursor.moveToFirst();
Я не понимаю, почему ошибка говорит о том, что db закрывается, если я вызываю this.getReadableDatabase() раньше. Пожалуйста Поддержи! Спасибо:)