Özel durum: yakın bir SQLiteClosable üzerinde bir başvuru almak için girişimde
this Mayıs ayında [android-geliştiriciler] Google Grup yayınlanmıştır. Bir cevap alamadım ve öğrencilerimden biri geçen hafta yapana kadar sorunu yeniden oluşturmak mümkün değildi. Burada yazılan ve eğer biri için herhangi bir çan çaldı diye düşündüm.
Benim kod örnekleri, aşağıdaki yöntemi var:
static Cursor getAll(SQLiteDatabase db, String orderBy) {
return(db.rawQuery("SELECT * FROM restaurants " orderBy, null));
}
Bunu çalıştırdığımda, düzensiz, ben bu olsun:
05-01 14:45:05.849: ERROR/AndroidRuntime(1145):
java.lang.IllegalStateException: attempt to acquire a reference on a
close SQLiteClosable
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:31)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:56)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1092)
05-01 14:45:05.849: ERROR/AndroidRuntime(1145): at
apt.tutorial.Restaurant.getAll(Restaurant.java:14)
Bu bana çok mantıksız geliyor. Veritabanı kesinlikle açıktır. Bu
SQLiteClosable
SQLiteQuery
SQLiteQueryDriver
ve ben tarafından oluşturulur
nesne yüzme havuzu olduğunu hiçbir kanıt ya da bir şey burada görmek
bu nasıl bir "SQLiteClosable
zaten kapalı." yeni açıklayabilir Bu
tek tük olduğunu aslında (yani aynı UI işlemleri bazen
bu durum, her zaman olmasa da tetikleyici havuzu, yarışı gibi bir şey öneriyor
durum, ya da bir şey. ama emin değilim.
Düşünceler?
Teşekkürler!
GÜNCELLEMEŞu kodu Android Programming Tutorials benim kitabımdan LunchList öğreticiler. Biraz ve çok uygun değil doğrudan gönderme için yayıldı. Eğer bakmak isterseniz yukarıda kitap için kod link indirebilirsiniz. Öğrenci Öğretici 12-Öğretici 16 aralıkta olmasına rağmen o anda çalışmakta olduğunu tam olarak hatırlamıyorum. Çoğunlukla bu sorun daha önce takılmayacak vardı ve olası bir suçlu olan biriyle karşılaşmayı umuyordum. Benim veritabanı açık olduğundan eminim. Tekrar teşekkürler!
CEVAP
Bu uzun bir süre beni delirtti. Oldukça basit buldum çözüm: devam SQLiteDatabase
nesnelere başvurular yok. Bunun yerine, SQLiteOpenHelper
bir getWritableDatabase()
ihtiyacın olduğu her zaman arayabilirsiniz. Gelen dokümanlar:
() kamu senkronize SQLiteDatabase getWritableDatabase
Oluşturmak ve/veya okuma ve yazma için kullanılan bir veritabanı açın.Bir kez başarıyla açıldı, veritabanı bu yöntem veritabanına yazmak için ihtiyacınız olan her zaman arayabilirsin, önbelleğe alınır.
Cevap hep orada oldu.
Nasıl bir özel durum olduğunu doğrulam...
Nasıl (sorgu dizesi) Node.js üzerinde ...
Benim C sunucusunun IP adresini almak ...
Nasıl Mac OS X üzerinde özel bir yazıl...
İOS 5.1 SDK Snow Leopard üzerinde böyl...