У меня проблема при предварительной загрузке базы данных Sqlite в React Native: прекрасно работает с приведенным ниже кодом в симуляторе, но не на устройствах (как iOS, так и Android).Не могли бы вы мне помочь?
Это часть моего App.js:
componentDidMount = () => {
this.downloadDatabase();
}
downloadDatabase = async () => {
const sqliteDirectory = `${FileSystem.documentDirectory}SQLite`;
const { exists, isDirectory } = await FileSystem.getInfoAsync(
sqliteDirectory
);
console.log(exists?"The path exists":"The path does not exists");
if (!exists) {
await FileSystem.makeDirectoryAsync(sqliteDirectory);
console.log("Path created");
} else if (!isDirectory) {
throw new Error('SQLite dir is not a directory');
}
const pathToDownloadTo = `${sqliteDirectory}/Words.db`;
const uriToDownload = Asset.fromModule(require('./assets/data/lod/Words.db')).uri;
await FileSystem.downloadAsync(uriToDownload, pathToDownloadTo);
console.log("DB downloaded");
this.setState({ dbDownload: true });
};
...
if (!this.state.isLoadingComplete && !this.props.skipLoadingScreen && !this.state.dbDownload) {
return (
<AppLoading
startAsync={this._loadResourcesAsync}
onError={this._handleLoadingError}
onFinish={this._handleFinishLoading}
/>
);
} else {
return (
something else
);
}
}
И мой другой файл js:
const db = SQLite.openDatabase('Words.db');
const sql = 'SELECT * FROM Words'
db.transaction(tx => {
tx.executeSql(
sql,
[],
(tx, results) => {
if(results.rows.length > 0)
this.setState({ results: results.rows._array });
else
this.setState({ results: [] });
}
);
});
Опять же, нормально работает насимулятор, работает с SDK 33. Большое спасибо за помощь!