【问题标题】:Tizen Web Application Wearable :TypeMismatchErrorTizen Web 应用程序可穿戴设备:TypeMismatchError
【发布时间】:2017-01-03 03:17:31
【问题描述】:

在以下代码中获取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 复制粘贴,但仍然无效。

请帮忙。预先感谢!! 当我浏览可穿戴设备的文件系统时,我在哪里可以找到“文档”目录。

【问题讨论】:

  • 请提供更详细的代码。

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


【解决方案1】:

您可以从 Tizen IDE 在线示例应用程序中获得帮助。 Tizen Web App 的File Manager App 将为您提供帮助。

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

  • 转到新的 Web 项目
  • 在线示例
  • 查找文件管理器

演示:

【讨论】:

  • 我正在尝试在可穿戴设备 Samsung Gear S2 classic 上执行这项工作。它也不适用于模拟器。我还浏览了可穿戴设备的 FileSystem API,上面的代码是此处提供的 90% 复制粘贴表单文件系统指南:developer.tizen.org/ko/development/tutorials/web-application/… 我仍然会尝试看看上面的示例应用程序。希望它会有所帮助。
  • API 和我想的差不多。您可以使用它来获得帮助。
  • 我找到了一个解决方案,但我不确定它背后的原因是什么。我得到错误的地方,我使用this.functionName调用这些函数错误是由于使用this造成的。一旦我删除了this keword 并用fileHandler 替换它们,一切正常。由于我对 javascript 不是很有信心,所以我无法断言这种行为的原因,但我仍然认为它就像在 java 或 C 中使用静态上下文一样
【解决方案2】:

简单答案将this 更改为fileHandler

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

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

你相信checkCorruptedRemovableDrives中的“这个”是fileHandler

但大多数 Tizen Web API 回调函数调用如下代码。

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

apply 的第一个参数被传递到 callback for 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

【讨论】:

  • 感谢您的精彩解释。我已经想通了。在下面的答案中发表了评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2017-01-08
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多