2016-04-07 10 views
0

Bis jetzt habe ich die Kamera API für meine App funktioniert, zu der die Kamera geöffnet wird, wenn eine Taste geklickt wird und sobald das Bild aufgenommen wurde, wird es auf der Seite angezeigt.Speichern des aufgenommenen Bildes in der SQlite-Datenbank? (Cordova)

Mein nächster Schritt ist, das Bild in meiner SQLite-Datenbank innerhalb einer Tabelle zu speichern. Das Erstellen der Datenbank ist kein Problem, da ich bereits ein paar andere Tabellen für andere Teile der App verwendet habe, die gut funktionieren. Ich finde nur heraus, wie man das Bild in der Datenbank speichert.

Kann hier jemand Hilfe leisten?

Kamera-Funktion:

document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.getElementById("btnCamera").onclick = function() { 
    navigator.camera.getPicture(function (imageUri) { 
    var lastPhotoContainer = document.getElementById("lastPhoto"); 
    alert("Hot stuff!"); 
    lastPhotoContainer.innerHTML = "<img src='" + imageUri + "' style='width: 75%;' />"; 
    }, null, null); 
      }; 
      } 

HTML:

<div data-role="page" id="page7" data-theme="d"> 
    <div data-role="header"> 
     <a href="#page1" class="ui-btn ui-icon-home ui-btn-icon-left">Sign ut</a> 
     <h1>SoccerMeet</h1> 
    </div> 
    <div data-role="main" class="ui-content"> 
     <input id="btnCamera" type="button" value="Camera photo" /> 
     <p id="lastPhoto"></p> 
    </div> 

    <div data-role="footer"> 
     <h2>&copy; Gallery</h2> 
    </div> 
</div> 

AKTUALISIERT Script:

document.addEventListener("deviceready", onDeviceReady, false); 
    var db; 

    function onDeviceReady() { 
    db = window.openDatabase("SoccerEarth", "2.0", "SoccerEarthDB", 2 * 1024 * 1024); 
    db.transaction(function(tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS Gallery (id INTEGER PRIMARY KEY, myImage BLOB)'); 
    }, errorE, successS); 
    } 

    function successS() { 
    alert("Camera database ready!"); 
    document.getElementById("btnCamera").onclick = function() { 
     navigator.camera.getPicture(onSuccess, onFail, { 
     quality: 50, 
     destinationType: Camera.DestinationType.DATA_URL 
     }); 
    }; 
    } 

    function onSuccess(tx, imageData) { 
    alert("Camera test 1"); 
    var image = document.getElementById("lastPhoto"); 
    image.src = "data:image/jpeg;base64," + imageData; 
    base64imageData = imageData; 
    var _Query3 = ("INSERT INTO Gallery(myImage) values ('" + base64imageData + "')"); 
    alert(_Query3); 
    tx.executeSql(_Query3); 
    } 
    /* function successCamera() { 
    navigator.notification.alert("Image has been stored", null, "Information", "ok"); 
     $(":mobile-pagecontainer").pagecontainer("change", "#page4"); 
    } */ 

    function onFail(message) { 
    alert('Failed because: ' + message); 
    } 

    function errorE(err) { 
    alert("Error processing SQL: " + err.code); 
    } 
+0

Sie wandeln das Bild zu base64 und speichern. – IamKarim1992

+0

@ IamKarim1992 wäre toll, wenn Sie eine Art Vorlage zur Verfügung stellen könnten? – Mahdi

+0

@Mahdi: Haben Sie die Lösung für Ihre Anfrage? Da ich auch Probleme in einem ähnlichen Szenario habe. – Mrunal

Antwort

1
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.getElementById("btnCamera").onclick = function() { 
    navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
    destinationType: Camera.DestinationType.DATA_URL 
}); 
}; 
      } 
      function onSuccess(imageData){ 
      var image = document.getElementById("lastPhoto"); 
      image.src = "data:image/jpeg;base64," + imageData; 
      //the imageData is a base64 representation of the image. 
      base64imageData=imageData;// this variable is a global variable and when ever asked for u can send it to SQL Operation class for storing. 
      } 

      function onFail(message) { 
      alert('Failed because: ' + message); 
     } 
+0

Danke dafür, aber mir ist immer noch nicht ganz bewusst, wie ich die Daten in die Datenbank einfügen kann. Ich habe meinen Code aktualisiert, um in vollem Umfang anzuzeigen, wie er aussieht. Ich habe eine weitere Abfrage erstellt, die eine neue Tabelle mit dem Namen gallery erstellt, wie Sie oben sehen können. Könnte ich ein execute sql einfügen, um "+ image.src +" in die Spalte "myImage" einzufügen? – Mahdi

+0

Sie machen eine Abfrage und übergeben sie .tx.executeSql (sql); Wobei var sql = "INSERT INTO Galerie (id, myImage) VALUES (" SomeID "," "+ (base64imageData) +" ') ".... wo decalared base64imageData als globale Variable deklariert wird, auf die die db write Funktion zugreifen kann , die du anrufen würdest, wo du willst. Dies ist die Logik und eine sehr gültige Antwort, als ich sie implementiert habe. Wenn es hilft, es als eine Antwort zu markieren. – IamKarim1992

+0

keine u kann nicht als img.src ist lokal für die Erfolg-Funktion, aber base64imageData wäre global und Sie können auf die Daten zugreifen, wo Sie die tx.executeSql – IamKarim1992

Verwandte Themen