【发布时间】:2015-01-22 06:00:10
【问题描述】:
我编写了一个访问外部存储上的 SQLite 数据库的应用程序。该应用程序在我的 Nexus 4 和模拟器上运行良好,适用于 Android 4.4。由于我将手机升级到 Android 5,它不再显示 SQLite 数据库中的任何数据。 API 21 上的模拟器也没有显示任何数据。
没有抛出错误或异常。 API 21 上的数据库游标只是空的。
数据库是这样打开的:
String path = myContext.getExternalFilesDir(null).getAbsolutePath() + File.separator + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
查询是这样执行的:
Cursor cur = myDataBase.rawQuery("SELECT * FROM employee WHERE employee match ? " +
"ORDER BY firstname, lastname LIMIT 100",
new String[] { "*" + queryString+ "*" });
while (cur.moveToNext()) {
persons.add(getPerson(cur)); // never reaches this since API 21
}
cur.close();
从 18 到 21 发生了什么变化?
完整的源代码可以在这里找到:https://github.com/sebastianhaeni/Contacts
【问题讨论】:
-
Manifest 中的目标 sdk?
-
用 21 和 18 试过,结果一样
-
dbHelper 的 onCreate 是否被调用?
-
该路径还在被应用访问吗?
-
看这个。这可能是因为 Android Lollipop 为 SQLite 引入了重大更改:stackoverflow.com/questions/26816561/…
标签: java android sqlite android-5.0-lollipop