Ошибка создания базы данных в Android - PullRequest
0 голосов
/ 23 августа 2011

Я отображаю базу данных в виде списка в Android. я отображаю список в другой деятельности. я создаю базу данных в oncreate, просто вызывая класс «data», расширяющий sqliteopenhelper, и передавая таблицу, но как только я запускаю приложение, трассировка стека в DDMS составляет

08-23 14:29:07.771: ERROR/Database(5175): Leak found
08-23 14:29:07.771: ERROR/Database(5175): java.lang.IllegalStateException: /data/data/com.cortes/databases/location.db SQLiteDatabase created and never closed
08-23 14:29:07.771: ERROR/Database(5175):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1792)
08-23 14:29:07.771: ERROR/Database(5175):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:798)
08-23 14:29:07.771: ERROR/Database(5175):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:857)
08-23 14:29:07.771: ERROR/Database(5175):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:850)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:539)
08-23 14:29:07.771: ERROR/Database(5175):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
08-23 14:29:07.771: ERROR/Database(5175):     at com.cortes.Cortes.onCreate(Cortes.java:79)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
08-23 14:29:07.771: ERROR/Database(5175):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 14:29:07.771: ERROR/Database(5175):     at android.os.Looper.loop(Looper.java:123)
08-23 14:29:07.771: ERROR/Database(5175):     at android.app.ActivityThread.main(ActivityThread.java:4363)
08-23 14:29:07.771: ERROR/Database(5175):     at java.lang.reflect.Method.invokeNative(Native Method)
08-23 14:29:07.771: ERROR/Database(5175):     at java.lang.reflect.Method.invoke(Method.java:521)
08-23 14:29:07.771: ERROR/Database(5175):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
08-23 14:29:07.771: ERROR/Database(5175):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
08-23 14:29:07.771: ERROR/Database(5175):     at dalvik.system.NativeStart.main(Native Method)
08-23 14:29:07.846: ERROR/wpa_supplicant(2300): wpa_driver_priv_driver_cmd failed
08-23 14:29:07.846: ERROR/wpa_supplicant(2300): wpa_driver_priv_driver_cmd failed

и мой код

db = this.openOrCreateDatabase("location.db", SQLiteDatabase.OPEN_READWRITE, null);
d = new data(this,Geo_Create_Table);
db=d.getWritableDatabase();

Ответы [ 2 ]

0 голосов
/ 23 августа 2011

Вам необходимо закрыть соединение с базой данных, прежде чем покинуть активность. Лучший способ - закрыть обратный вызов onPause() и открыть onResume(). Это гарантирует, что соединение с базой данных всегда находится в действительном состоянии.

Соответствующие вопросы / ответы здесь и здесь .

Вторая ссылка показывает стратегию для совместного использования соединения с базой данных между действиями путем расширения класса Application.

0 голосов
/ 23 августа 2011

Поскольку у меня пока недостаточно репутации, чтобы оставлять комментарии>. <Вместо этого я собираюсь поставить это в качестве ответа. </p>

Трассировка стека содержит эту базу данных SQLite, созданную и никогда не закрытую , что наводит меня на мысль, что база данных никогда не была закрыта.Я предполагаю, что Android пишет о трех строках здесь db = this.openOrCreateDatabase ("location.db", SQLiteDatabase.OPEN_READWRITE, null);d = новые данные (это, Geo_Create_Table);дБ = d.getWritableDatabase ();и так как это все, что вы предоставили, я думаю, что вы думаете то же самое.Если я понимаю, что это пытается сделать, вы открываете локально сохраненную базу данных db, а затем, я думаю, d также ссылается на ту же локально сохраненную базу данных.МОЖЕТ БЫТЬ (не слишком уверен), что вызывает утечки памяти в вашем приложении, но я знаю одно, что вам нужно где-то добавить db.close().

Вы можете попробовать предположение, сделанное этим другим пользователем, с помощью попытки {} finally {db.close ()} Нужна помощь с доступом к базе данных в Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...