我正在尝试启动一个React-Native和Expo应用程序,但我遇到了一个大问题:该应用程序使用预制的SQLite数据库来读取和更新信息。
此数据库在应用程序首次启动时加载到应用程序中,或者如果版本已更新(通过简单变量)。
我通过Expo客户端测试了该应用程序,没有任何问题,但现在我在手机上尝试(通过APK),没有数据库,我不知道为什么它不工作。
加载数据库的代码:
FileSystem.downloadAsync(
Asset.fromModule(require('../databases/programs.db')).uri,
`${FileSystem.documentDirectory}SQLite/programs-${version}.db`
).then(() => {
programsDB = SQLite.openDatabase(`programs-${version}.db`);
loadDB(loaded);
});
字符串
在metro.config.js
中:
module.exports = {
resolver: {
blacklistRE: blacklist([/amplify\/#current-cloud-backend\/.*/]),
assetExts: ["db", "ttf", "png", "jpg"]
},
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};
型
在app.json
中:
"assetBundlePatterns": [
"src/library/assets/**/*",
"src/library/databases/*",
"src/library/fonts/*"
],
"packagerOpts": {
"assetExts": ["db"]
},
型
我试过这两种方法:
require('../databases/programs.db'
型
以及:
require('library/databases/programs.db'
型
在应用程序尝试从数据库加载东西后,我得到以下错误:
您访问的页面不存在!/data/user/0/com. company. myApp/files/SQLite/programs-2020052401.db
我还尝试将源数据库从.db
下载更改为.mp4
,但它也不这样做。
我该怎么解决呢?
1条答案
按热度按时间zi8p0yeb1#
解决方案
在对它进行修补以隔离问题之后,我最终发现问题在于,将在设备中保存数据库的目录(SQLite)没有使用downloadAsync创建,如果我更仔细地阅读文档,我就会知道这一点。如果它不存在,我只需要首先创建目录,然后它就可以正常工作了。
下面是代码最终的样子:
字符串