android - Android P - 从资产复制数据库后出现“SQLite:没有这样的表错误”
问题描述
我在我的应用程序资产文件夹中保存了一个数据库,并在应用程序首次打开时使用以下代码复制数据库。
inputStream = mContext.getAssets().open(Utils.getDatabaseName());
if(inputStream != null) {
int mFileLength = inputStream.available();
String filePath = mContext.getDatabasePath(Utils.getDatabaseName()).getAbsolutePath();
// Save the downloaded file
output = new FileOutputStream(filePath);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = inputStream.read(data)) != -1) {
total += count;
if(mFileLength != -1) {
// Publish the progress
publishProgress((int) (total * 100 / mFileLength));
}
output.write(data, 0, count);
}
return true;
}
上面的代码运行没有问题,但是当您尝试查询数据库时,您会得到一个 SQLite: No such table 异常。
此问题仅在 Android P 中出现,所有早期版本的 Android 都可以正常工作。
这是 Android P 的一个已知问题还是发生了一些变化?
解决方案
有一个类似的问题,并解决了这个添加到我的 SQLiteOpenHelper
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
db.disableWriteAheadLogging();
}
显然,Android P 设置了 PRAGMA Log 的东西不同。仍然不知道是否会产生副作用,但似乎有效!
推荐阅读
- android - 在代码中获取android关闭原因
- javascript - Material-UI useMediaQuery 最初没有识别出正确的断点
- swiftui - 已发布属性更改不更新界面
- css - 身体方向 rtl 时覆盖 Scss 变量值
- html - 如何修复无法加载资源状态 404 github 页面
- python - AttributeError:dlsym(RTLD_DEFAULT,AttachDebuggerTracing):找不到符号
- javascript - 尝试从 Nodejs 中的 UniswapV2 工厂订阅 PairCreated 事件
- reactjs - 为 ReactJS App 自定义 502 bad gateway 错误
- python-3.x - 将 EEG edf 转换为找到的重复项时出现 RuntimeWarning:{'T8-P8'}
- java - 如何使用 FOR 循环激活按钮?