1
私は現在、Ionic Frameworkを使ってハイブリッドアプリをやっています。Cordova-sqlitePluginがデータベースを開くことができませんでした
先週はすべてうまく動いていましたが、プラグインから何も変更せずに、ただ停止しました。すべての解決策や十分なアプローチでスレッドが見つかりませんでした。
私はAndroidとiOSデバイスで動作しています。
ADB Logcat:
I/chromium(1844): [INFO:CONSOLE(175)] "OPEN database: my.db", source: file:///android_asset/www/plugins/cordova-sqlite-storage/www/SQLitePlugin.js (175)
I/chromium(1844): [INFO:CONSOLE(106)] "new transaction is waiting for open operation", source: file:///android_asset/www/plugins/cordova-sqlite-storage/www/SQLitePlugin.js (106)
I/chromium(1844): [INFO:CONSOLE(197)] "OPEN database: my.db FAILED, aborting any pending transactions", source: file:///android_asset/www/plugins/cordova-sqlite-storage/www/SQLitePlugin.js (197)
I/chromium(1844): [INFO:CONSOLE(83)] "Could not open database", source: file:///android_asset/www/plugins/cordova-sqlite-storage/www/SQLitePlugin.js (83)
XCodeのコンソールログがはるかに(全く)は表示されません。
コルドバは、プラグインをインストール:
com.googlemaps.ios 1.13.0 "Google Map iOS SDK for Cordova"
cordova-plugin-compat 1.0.0 "Compat"
cordova-plugin-console 1.0.4 "Console"
cordova-plugin-dbcopy 1.0.4 "sqlDB"
cordova-plugin-device 1.1.2 "Device"
cordova-plugin-file 4.3.0 "File"
cordova-plugin-geolocation 2.4.0 "Geolocation"
cordova-plugin-googlemaps 1.3.9 "phonegap-googlemaps-plugin"
cordova-plugin-splashscreen 3.2.2 "Splashscreen"
cordova-plugin-sqlite-2 1.0.4 "SQLitePlugin"
cordova-plugin-statusbar 2.1.3 "StatusBar"
cordova-plugin-whitelist 1.2.2 "Whitelist"
cordova-sqlite-storage 1.4.8 "Cordova sqlite storage plugin"
ionic-plugin-keyboard 2.2.1 "Keyboard"
実装:
angular.module('starter.controllers', [])
.controller('RoutesCtrl', function($scope, $ionicPlatform, $http) {
// Database functions…
$ionicPlatform.copyDatabaseFile = function(db_name)
{
var sourceFileName = cordova.file.applicationDirectory + 'www/' + db_name;
var targetDirName = cordova.file.dataDirectory;
return Promise.all([
new Promise(function (resolve, reject) {
resolveLocalFileSystemURL(sourceFileName, resolve, reject);
}),
new Promise(function (resolve, reject) {
resolveLocalFileSystemURL(targetDirName, resolve, reject);
})
]).then(function (files) {
var sourceFile = files[0];
var targetDir = files[1];
return new Promise(function (resolve, reject) {
targetDir.getFile(db_name, {}, resolve, reject);
}).then(function() {
console.log("file already copied");
}).catch(function() {
console.log("file doesn't exist, copying it");
return new Promise(function (resolve, reject) {
sourceFile.copyTo(targetDir, db_name, resolve, reject);
}).then(function() {
console.log("database file copied");
});
});
});
}
$ionicPlatform.openDB = function()
{
if(isIOS){
db = window.sqlitePlugin.openDatabase({name: db_name, iosDatabaseLocation: 'defaut'});
} else {
db = window.sqlitePlugin.openDatabase({name: db_name, location: 'default'});
}
return db;
}
// This function is called later on on the code.
$ionicPlatform.runDbQuery = function(query)
{
db = $ionicPlatform.openDB();
db.readTransaction(function (txn) {
txn.executeSql(query, [], function (tx, res) {
console.log(JSON.stringify(res));
return res;
});
});
}
//code continues…
私は前に述べたように、上記のこの同じコードは、Android上で先週うまく働いて、今それはdoesnのt。 実際には、事前設定されたデータベースをコピーする部分はうまく機能します(コールバックログに表示されます)。
多くの人がこの厄介な問題に遭遇したかどうかを知りたいと思います。
ありがとうございます。