Почему базы данных sqlite расположены на SDCard только для чтения при использовании тега min-sdk в манифесте? - PullRequest
1 голос
/ 26 ноября 2010

Я разместил этот вопрос более недели назад в списке разработчиков Android, но пока ответов нет.

Я столкнулся со странной проблемой.Я работаю с базой данных, расположенной в / sdcard /, и по какой-то причине всякий раз, когда я добавляю <uses-sdk android:minSdkVersion="8" /> в манифест sqlite, открывается БД только для чтения.Это тоже немного страннее.Приведенный ниже код открывает БД и проверяет, доступна ли БД только для чтения, что возвращает ложь:

db = SQLiteDatabase.openDatabase("/sdcard/test.db3", null, SQLiteDatabase.OPEN_READWRITE); Log.i(LOGTAG, "Database status: " + db.isReadOnly());

, но если я пытаюсь записать какие-либо данные, с которыми она бомбардирует:*INFO/Database(6576): sqlite returned: error code = 8, msg = prepared statement aborts at 24: [INSERT INTO tags(type_id , tag) VALUES(?, ?);] ERROR/Database(6576): Error inserting type_id =1 tag=TestTag ERROR/Database(6576): android.database.sqlite.SQLiteException: error code 8: attempt to write a readonly database

Если я удаляю тэг Использования-SDK из манифеста, все работает нормально.Я проверил это на эмуляторе, NexusOne с 2.2.1 и Galaxy Tab.Это известная проблема?Есть ли обходной путь?

Любая помощь будет принята с благодарностью.

1 Ответ

6 голосов
/ 26 ноября 2010

Вам необходимо разрешение WRITE_EXTERNAL_STORAGE.

Кроме того, никогда, никогда, никогда никогда не задавайте путь к внешнему хранилищу, как вы делаете.Ваш код сломается на устройствах Android 2.2.Ваш код сломается на других устройствах.Используйте Environment.getExternalStorageDirectory(), пожалуйста.

...