2

PhoneGap(Cordova 2.2.0)を使用してAndroidアプリケーション(Android 4.1.2)を開発しています。

私はCordovaStorageAPIを使用しています:

このようなAndroidでデータベースを操作する方法を学ぶために、インターネットで見つかったさまざまな例に従っています。Phonegap+Jquerymobileを使用してSQLiteでAndroidアプリを作成する

実際、私の問題は、データベースが実際のデバイスで物理的に作成されているかどうかわからないことです(Android 2.3で実行されている実際のデバイスでテストしています)。

  • ファイルエクスプローラーで/data/フォルダーをチェックインしましたが、折りたたまれて展開できませんでした(システム管理者の問題の可能性がありますか?!その場合、どうすればルートになりますか?)
  • 電話で直接確認しましたが、アプリケーションディレクトリすら見つかりませんでした。(正常ですか?)

=>データベースが作成されたかどうかはわかりません。

データベースが作成されていないと思っているのはなぜですか?

実際、アプリを起動するたびに、以前にデータを入力したにもかかわらず、テーブルは空になっています。

LogCatにもこのエラーがあります。

sqlite returned error code = 14 msg = cannot open file at source line 25467

いくつかの調査を行ったところ、onCreate関数のこのコードで問題を解決できることがわかりました。

    WebSettings settings = super.appView.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    settings.setDatabaseEnabled(true); 
    String databasePath = this.getApplicationContext().getDir("database", 
                           Context.MODE_PRIVATE).getPath(); 
    settings.setDatabasePath(databasePath); 

しかし、それはそれを解決しませんでした。

私のコードは単純です。QRコードを読み取り、次の場所にあるテーブルに保存します。

var scanCode = function() {
    window.plugins.barcodeScanner.scan(
        function(result) {  
        alert("Scanned Code: " + result.text 
                + ". Format: " + result.format
                + ". Cancelled: " + result.cancelled);
        getPosition(result.text);
    }, function(error) {
        alert("Scan failed: " + error);
    });
}

function getPosition(data) {
    navigator.geolocation.getCurrentPosition(
            function(position, result){
                launchDB();
                latitude = position.coords.latitude;
                longitude = position.coords.longitude;
                db.transaction(function(tx) {
                    tx.executeSql("insert into DEMO(code,updated, latitude, longitude) values(?,?,?,?)",[data, new Date(),latitude, longitude]);
                },errorCB,successInsert);
            }, positionError);
}

function launchDB() {
    console.log("launchDB()");
    db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
    db.transaction(setupDB, errorCB);
}

function setupDB(tx) {
    console.log("setupDB()");
    tx.executeSql('DROP TABLE IF EXISTS DEMO');
    tx.executeSql("CREATE TABLE IF NOT EXISTS DEMO(id INTEGER PRIMARY KEY,code,updated, latitude, longitude)");
}

function errorCB(err) {
    console.log("Error processing SQL: "+err.code);
}

function successInsert() {
    console.log("successInsert()");
}

そして、別のページに行を表示しようとしています。

function showCode() {
    console.log("showCode()");
    db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
    db.transaction(parseDB, errorCB);
}

function parseDB(tx) {
    console.log("parseDB()");
    tx.executeSql('SELECT * FROM DEMO', [], writeEntries, errorCB);
}

function writeEntries(tx, results) {
    console.log("writeEntries()");
    var len = results.rows.length;
    document.write("DEMO table: " + len + " rows found.");
    console.log("DEMO table: " + len + " rows found.");
    for (var i=0; i<len; i++){
        document.write("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " + results.rows.item(i).code + " Latitude =  " + results.rows.item(i).latitude+ " Longitude =  " + results.rows.item(i).longitude );
        console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " + results.rows.item(i).code + " Latitude =  " + results.rows.item(i).latitude+ " Longitude =  " + results.rows.item(i).longitude);
    }
}

ログには、作成された行が表示されます。しかし、htmlページではそうではありません(しかし、それは別の問題です:JQueryの問題)。しかし、別の行を追加しようとすると、最初の行はもう存在しません。

ご協力ありがとうございました。

4

1 に答える 1

0

launchDBを呼び出すたびにsetupDBが呼び出され、テーブルが存在する場合はそれを削除しているようです。

ファイルアクセスにいくつかの個別の問題がある可能性もありますが、そのドロップテーブルが最初に修正されます。

于 2012-11-16T11:53:45.870 に答える