Tizen Web Application Wearable:TypeMismatchError

时间:2016-08-26 12:33:43

标签: javascript tizen tizen-wearable-sdk tizen-web-app

在以下代码中获取TypeMismatchError: Value is not Object

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);
            }
        }
    }

};

错误发生在代码中标记为 Error Here 的两个位置。

tizen.filesystem.getStorage(storages[i].label, this.onStorage);中,第一个参数的数据类型是DOMString,storages[i].label也是DOMString类型。 在result.listFiles(this.listFilesSuccessCB);中需要一个回调函数。

大多数代码都是从Tizen FileSystem Guide粘贴的,但仍无效。

请帮忙。预先感谢!! 另外我在哪里可以找到&#34;文件&#34;目录,当我浏览我的可穿戴设备的文件系统时。

2 个答案:

答案 0 :(得分:1)

简单回答将this更改为fileHandler

在tizen API中调用函数时,不要相信“this”。

您似乎使用checkCorruptedRemovableDrives来回调tizen.filesystem.listStorages

您相信checkCorruptedRemovableDrives中的“this”是fileHandler

但大多数Tizen Web API回调函数都被称为跟随代码。

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

apply的第一个参数传递给callback this,但它是自我函数对象。

因此,如果您想在函数中使用fileHandler,请不要使用this直接使用fileHandler。

以下代码是Tizen Web API实现您可以在this函数后查看callIfPossible

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

答案 1 :(得分:0)

您可以从Tizen IDE在线样本应用程序获得帮助。 您将获得Tizen Web App File Manager App的帮助。

并查看Tizen的Filesystem API。 要获取文件管理器在线示例,

  • 转到新建网络项目
  • 在线示例
  • 查找文件管理器

演示: enter image description here