我一周前在 Android 开发者列表上发布了这个问题,但到目前为止没有任何回应。
我遇到了一个奇怪的问题。我使用位于/sdcard/上的数据库,出于某种原因,每当我添加 <uses-sdk android:minSdkVersion="8" />
list sqlite 以只读方式打开数据库。它也变得有点奇怪。下面的代码打开数据库并检查数据库是否只读,返回 false:
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
如果我从 list 中删除 uses-sdk 标签,一切正常。我在模拟器、运行 2.2.1 的 NexusOne 和 Galaxy Tab 上验证了这种行为。这是一个已知的问题?有解决方法吗?
任何帮助将不胜感激。
最佳答案
您需要WRITE_EXTERNAL_STORAGE
权限。
此外,永远永远永远永远永远永远永远不要按照您的方式硬编码外部存储的路径。您的代码将在 Android 2.2 设备上中断。您的代码将在其他设备上中断。请使用 Environment.getExternalStorageDirectory()
。
关于android - 为什么在 list 中使用 min-sdk 标签时位于 sdcard 上的 sqlite 数据库只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287819/