SORU
27 EYLÜL 2009, Pazar


Ö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
20 Mart 2010, CUMARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • expertvillage

    expertvillag

    5 NİSAN 2006
  • Krumme1996

    Krumme1996

    21 EYLÜL 2009
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006