我有一个使用预填充数据库的应用程序 - 按照此处的说明进行操作:
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
该应用程序在Android 4.1,4.3,5.0,5.1上正常运行 - 但是在4.0.3和4.0上它崩溃了
E/SqliteDatabaseCpp(551): SELECT locale FROM android_metadata failed
E/SQLiteDatabase(551): Failed to open the database. closing it.
E/SQLiteDatabase(551): android.database.sqlite.SQLiteException: no such table: android_metadata
我已经仔细检查了,并且根据文章在数据库上创建了元数据表。
错误来自:
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
我已经阅读了类似的线程,如果他们没有创建android_metadata表,那么使用SQLiteDatabase.NO_LOCALIZED_COLLATORS可以解决这个错误。
我已尝试过上述相同的错误。
以下是代码片段:
private static String DB_PATH = "/data/data/org.example/databases/";
private static String DB_NAME = "model_paint_conversion.db";
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
还尝试删除路径 - 然后我在复制数据库时出错。
知道它在4.0和4.0.3上崩溃了什么但是在其他版本上工作了吗?
答案 0 :(得分:0)
经过多次挖掘 - 查看复制到模拟器的db文件,发现元数据表确实丢失了。非常奇怪 - 我创造了它。
现在重新创建它并开始工作。
答案 1 :(得分:0)
使用SQLiteDatabase.NO_LOCALIZED_COLLATORS
尝试SQLiteDatabase.OPEN_READONLY
,并在清单中添加WRITE_SETTINGS
的使用权限
我有同样的问题,我确实喜欢这个并为我工作......