Ionic App - SQLite 错误“plugin_not_installed”仅在 iOs 设备中运行应用程序时

Ionic App - SQLite error "plugin_not_installed" only when running app in iOs devices

提问人:Bruno Santos 提问时间:7/14/2018 更新时间:1/4/2019 访问量:1238

问:

我使用 Ionic3+AngularJS 构建了一个混合应用程序,它使用 SQLite 数据库。

当我在 Android 的设备中运行该应用程序时,它可以完美运行,但是当我尝试在 iPhone 或 iPad 中运行它时,出现以下错误:plugin_not_installed。当应用尝试创建数据库时,会发生这种情况。

这是它创建数据库的方式:

  public getDB(){
    return this.sqlite.create({
      name: 'namedatabase.db',
      location: 'default'
    }).catch( error => this.showError(error));
  }

调用 catch() 并显示错误消息 “plugin_not_installed”。

SQLite使用以下方法安装:

 $ ionic cordova plugin add cordova-sqlite-storage
 $ npm install --save @ionic-native/sqlite

有什么想法吗?

iOS的 iphone sqlite ionic框架 ionic3

评论


答:

1赞 Friv 11/16/2018 #1

当我使用 Android 模拟器运行我的应用程序时,我遇到了同样的问题

离子科尔多瓦运行android -lc

当应用程序启动时,一切正常。但是在我的代码和保存命令中进行了几次更改后,应用程序重新加载并显示在我的控制台中

console.warn:Ionic Native:deviceready 未在 5000 毫秒内触发。当插件处于不一致状态时,可能会发生这种情况。尝试从插件中删除插件 / 并重新安装它们。
console.warn:'本机:尝试访问SQLite插件,但未安装。
console.warn:安装 SQLite 插件:“ionic cordova plugin add cordova-sqlite-storage”控制台.log:错误“plugin_not_installed”

即使我按照控制台要求我执行的操作,我仍然收到相同的错误,并且它无法创建我的 SQLite 数据库

我接下来做的是使用上面的运行命令重新运行应用程序,但它浪费了很多时间让我等待应用程序再次启动......再一次:(

createDBFile() {
    this.sqlite.create({
        name: DB_NAME,
        location: 'default'
    }).then((db: SQLiteObject) => {
        this.db = db;
        console.log('BDD cree')
        this.stockageLocal.get('dbstatus').then(opened => {
            if (opened) {
                console.log('DB deja ouvert');
            }
            else {
                console.log('create all table')
                this.createTables();
            }
        })
    }).catch(err => {
        console.log(' err', JSON.stringify(err))
    });
}
0赞 Federico Antonini 1/4/2019 #2

我有同样的问题:plugin_not_installed。 我解决了在承诺错误之后放置控制台.log检查并看到该表不存在的问题。

代码:

this.sqlite.create({
  name: 'ionicdb.db',
  location: 'default'
})
.then((db: SQLiteObject) => {
  db.executeSql('create table if not exists MY_SQLITE_STORAGE(key VARCHAR(32) PRIMARY KEY, value VARCHAR(32))', [])
    .then(() => {
      console.log('Executed Create table if not exists');
      this.toastCtrl.create({
        message: 'Table created ',
        duration: 5000,
        position: 'center'
      }).present();
    }).catch(e => console.log('error: '+JSON.stringify(e)));
}).catch(e => console.log('error: '+JSON.stringify(e)));