【问题标题】:Cannot read property 'openDatabase' of undefined in android无法读取 android 中未定义的属性“openDatabase”
【发布时间】:2016-12-21 03:09:18
【问题描述】:

尝试使用插件通过 ngCordova 实现在移动设备 SQLite 上管理数据库,但每次尝试创建数据库时都会显示相同的错误。手机有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'
            });


        }

    }

}

这是显示插件安装的截图

【问题讨论】:

    标签: android sqlite cordova ionic-framework ngcordova


    【解决方案1】:

    你可以尝试使用

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

    代替

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

    【讨论】:

    • 找到了解决办法,不能和app同时启动数据库
    【解决方案2】:

    我能够找到一个完全未知的问题的解决方案。

    之所以会产生这个问题,是因为数据库的创建和打开是打算在应用程序尝试启动的同时发起的,而且由于没有启动应用程序,数据库就不能存在,因为该方法的创建,它是不可能被执行的。

    适用于我的解决方案是,数据库是在通过命令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;
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 2020-10-30
      • 2019-10-09
      相关资源
      最近更新 更多