Android veritabanı ve imleçler ile ilgili garip bir sorunum var. Zaman zaman (çok nadiren), müşterilerden kaza raporu aldım. ~ 150.000 aktif kullanıcı ve belki de haftada 1 rapor var gibi, neden çökmek olduğunu anlamak zor, bu yüzden gerçekten küçük bir hata. İşte istisnadır:Android veritabanı - Bağlantı havuzu kapatıldığından bu işlem yapılamıyor
db = instance.getWritableDatabase();
cursor = db.rawQuery(selectQuery, null);
if (isCursorEmptyOrNotPrepared(cursor)) {
...
}
private synchronized boolean isCursorEmptyOrNotPrepared(Cursor cursor) {
if (cursor == null)
return true;
if (cursor.isClosed())
return true;
if (cursor.getCount() == 0) // HERE IT CRASHES
return true;
return false;
}
Ve çizgisinde düşer:
STACK_TRACE=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)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:834)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at sk.mildev84.agendareminder.a.c.a(SourceFile:169)
"yineleme ve keşfetmek" Ben her şeyi emin olmak için bu kodu her kullandığınızda imlecin önce tamam
if (cursor.getCount() == 0)
Herkes nedenini biliyor mu? Tüm olası istisnaları ve koşulları kontrol ettiğimi düşünüyorum. Uygulamam neden burada çöküyor?
Not: Tüm veritabanı yöntemleri senkronize edilmiştir ve her durumda veritabanı/imleçleri doğru şekilde açıp kapatıyorum, birçok kez kontrol ettim. veritabanını kapattıktan sonra başka bir işlem çalışırsanız
Daha fazla kod ve tam stacktrace gönderin. Bu iştahı alırsınız -> – nikis
güncellenmiş bir yerde bir hata var. – qkx
db'yi kapatmaya gerek yok. Android bunu hallediyor. Bu büyük açıklamayı buradan okuyun ...http://stackoverflow.com/questions/14002022/android-sq-lite-closed-exception/25379071#25379071 – Nepster