React Native / Sqlite / Expo: предварительная загрузка БД прекрасно работает на симуляторе, но не на устройствах - PullRequest
0 голосов
/ 26 июня 2019

У меня проблема при предварительной загрузке базы данных 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. Большое спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...