2016-08-26 6 views
0

Getting a TypeMismatchError: Value is not Object in den folgenden CodesTizen Web Application Wearable: TypeMismatchError

var fileHandler = { 
    storages:null, 
    documentsDIR:null, 
    newFile:null, 
    dirName:"documents", 
    fileName:"test.csv", 
    init: function init(){ 
     //tizen.filesystem.listStorages(this.checkCorruptedRemovableDrives);documents 
     tizen.filesystem.resolve(this.dirName, this.resolveSuccessCB,this.resolveErrorCB,"rw"); 

    }, 

    resolveSuccessCB: function resolveSuccessCB(result){ 
     this.documentsDir = result; 
     //this.newFile = documentsDir.createFile(this.fileName); 
     // Error Here - TypeMismatchError: Value is not Object 
     result.listFiles(this.listFilesSuccessCB); 
     console.log("All Good in "+this.documentsDir); 
    }, 

    resolveErrorCB: function resolveErrorCB(error){ 
     console.log("Unable to access "+this.dirName+". Error:"+error.message); 
    }, 

    listFilesSuccessCB: function listFilesSuccessCB(files){ 
     for (var i = 0; i < files.length; i++){ 
      /* Display the file name and URI */ 
      console.log("File name is " + files[i].name + ", URI is " + files[i].toURI()); 
     } 
    }, 



    onStorage: function onStorage(storage){ 
      console.log("Storage found:" + storage.label); 
    }, 
    checkCorruptedRemovableDrives: function checkCorruptedRemovableDrives(storages){ 
     this.storages = storages; 
     for (var i = 0; i < storages.length; i++) 
     { 
      if (storages[i].type != "EXTERNAL"){ 
       continue; 
      } 
      if (storages[i].state == "UNMOUNTABLE"){ 
       console.log("External drive " + storages[i].label + " is corrupted."); 
      } else { 
       console.log(" Storage = " + storages[i].label); 
       // Error here - TypeMismatchError: Value is not Object 
       tizen.filesystem.getStorage(storages[i].label, this.onStorage); 
      } 
     } 
    } 

}; Der Fehler tritt an zwei Stellen auf, die als Fehler in den Codes markiert sind.

In tizen.filesystem.getStorage(storages[i].label, this.onStorage); ist der Datentyp des ersten Arguments DOMString und storages[i].label ist auch vom Typ DOMString. In result.listFiles(this.listFilesSuccessCB); erwartet eine Callback-Funktion.

Die meisten Codes wurden kopiert eingefügt von Tizen FileSystem Guide, aber immer noch nicht funktioniert.

Bitte helfen. Danke im Voraus!! Auch wo finde ich das Verzeichnis "Dokumente", wenn ich das Dateisystem meines tragbaren Geräts durchsuche.

+0

Bitte mehr Details Code geben. –

Antwort

1

Einfache Antwort Änderung this zu fileHandler .

Vertrauen Sie nicht "das", wenn Ihre Funktion in tizen API aufgerufen wird.

Sie scheinen checkCorruptedRemovableDrives zu verwenden, um Rückruf von tizen.filesystem.listStorages zurückzurufen.

Und Sie vertrauen "dieses" in checkCorruptedRemovableDrives ist fileHandler.

Aber die meisten von Tizen Web API Callback-Funktionen aufgerufen wie folgenden Code.

callback.apply(callback, [].slice.call(arguments, 1)); 

erstes Argument gilt in callback für this vergangen, aber es ist selbstFunktionsObjekt.

Also, wenn Sie fileHandler in Ihrer Funktion wollen, verwenden Sie nicht this verwenden Sie fileHandler direkt.

folgenden Code ist Tizen Web API-Implementierung Sie können this folgende callIfPossible Funktion suchen.

function listStorages() { 
    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.FILESYSTEM_READ); 
    var args = validator_.validateArgs(arguments, [ 
    {name: 'onsuccess', type: types_.FUNCTION}, 
    {name: 'onerror', type: types_.FUNCTION, optional: true, nullable: true} 
    ]); 

    setTimeout(function() { 
    var storages = []; 
    var cache = commonFS_.getAllStorages(); 
    for (var i = 0; i < cache.length; ++i) { 
     storages.push(new FileSystemStorage(cache[i])); 
    } 

    native_.callIfPossible(args.onsuccess, storages); 
    }, 0); 
}; 

https://review.tizen.org/git/?p=platform/core/api/webapi-plugins.git;a=blob;f=src/filesystem/js/file_system_manager.js;h=622f38d479647584012925773d124d7f9a59e51d;hb=refs/heads/tizen#l158

NativeManager.prototype.callIfPossible = function(callback) { 
    if (!_type.isNullOrUndefined(callback)) { 
    callback.apply(callback, [].slice.call(arguments, 1)); 
    } 
}; 

https://review.tizen.org/git/?p=platform/core/api/webapi-plugins.git;a=blob;f=src/utils/utils_api.js;h=5502e3f2a46254c7e2da9d838bacd55be9aaab20;hb=refs/heads/tizen#l1141

+0

Vielen Dank für die nette Erklärung. Das hatte ich herausgefunden. Hatte in der Antwort unten kommentiert. –

0

Sie können Hilfe von Tizen IDE Online-Beispiel-App bekommen. Sie werden von File Manager App der Tizen Web App unterstützt werden.

Und überprüfen Sie Filesystem API von Tizen. Um File Manager Online Probe,

  • Zum Neues Webprojekt
  • Online Beispiel
  • Suche File Manager

Demo zu erhalten: enter image description here

+0

Ich versuche, den Job auf einem tragbaren Gerät Samsung Gear S2 Classic durchzuführen. Es funktioniert auch nicht auf dem Emulator. Ich habe auch die FileSystem-API für Wearables durchlaufen und der obige Code ist 90% Kopier-Paste-Formular FileSystem Guide, die hier bereitgestellt wird: https: //developer.tizen.org/ko/development/tutorials/web-application/tizen-features/base/filesystem? langredirect = 1 Noch werde ich versuchen, einen Blick auf die obige Beispielanwendung zu werfen. Hoffe es wird helfen. –

+0

API ist fast gleich, denke ich. Sie können dies verwenden, um Hilfe zu erhalten. –

+0

Ich habe eine Lösung gefunden, aber ich bin mir nicht sicher, was der Grund dafür ist. die Orte, an denen ich Fehler erhalte, mache ich einen Aufruf an diese Funktion mit 'this.functionName' Der Fehler war wegen der Verwendung von' this'. Sobald ich 'this' keword entfernt und durch' fileHandler' ersetzt habe, haben die Dinge gut funktioniert. Da ich nicht sehr zuversichtlich mit Javascript bin, kann ich nicht den Grund für ein solches Verhalten behaupten, aber immer noch denke ich, es ist wie mit statischen Kontext wie in Java oder C –

Verwandte Themen