无法读取 android 中未定义的 属性 'openDatabase'

Cannot read property 'openDatabase' of undefined in android

尝试通过 ngCordova 实现使用插件在移动设备 SQLite 上管理数据库,但每次尝试创建数据库时都显示相同的错误。 phone 有 Android 4.2.2

TypeError: Cannot read property 'openDatabase' of undefined

我的代码,添加 ionic 和 ngCodova 以使用插件的

angular.module('starter', ['ionic', 'ngCordova'])
    .run(startApp)
    .controller('networkCtrl', networkCtrl)
    .factory('databaseFtr', databaseFtr);

启动应用程序

startApp.$inject = ['$ionicPlatform'];

function startApp($ionicPlatform) {

    $ionicPlatform.ready(function() {

        if (window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
            cordova.plugins.Keyboard.disableScroll(true);
        }

        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

    });

}

控制器

networkCtrl.$inject = ['$scope', 'databaseFtr'];

function networkCtrl($scope, databaseFtr) {
    databaseFtr.crearDB();
}

工厂

databaseFtr.$inject = ['$cordovaSQLite'];

function databaseFtr($cordovaSQLite) {

    return {

        crearDB: function() {

            var db;

            db = $cordovaSQLite.openDB({
                name: "mydata.db",
                location: 'default'
            });


        }

    }

}

这是显示插件安装的截图

你可以尝试使用

 window.sqlitePlugin.openDB({
            name: "mydata.db",
            location: 'default'
        });

而不是

$cordovaSQLite.openDB({
            name: "mydata.db",
            location: 'default'
        });

我找到了解决问题的方法,这是完全未知的。

产生这个问题的原因是因为数据库的创建和打开是在应用程序试图启动的同时开始的,并且由于没有启动应用程序数据库就不可能存在,因为this的创建方法,无法执行

适用于我的解决方案是,数据库是在 运行 函数之后通过命令 ng-click.

创建的

代码

function networkCtrl($scope, databaseFtr) {

    $scope.dbProcesos = {

        dbCreate: function() {
            var db;
            db = databaseFtr.crearDB();
        }

}




function databaseFtr($cordovaSQLite) {

    return {

        crearDB: function() {

            var db;

            db = $cordovaSQLite.openDB({
                name: "patologias.db",
                location: 'default'
            });

            return db;

        }
    }
}