在以下代码中获取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;目录,当我浏览我的可穿戴设备的文件系统时。
答案 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);
};
NativeManager.prototype.callIfPossible = function(callback) {
if (!_type.isNullOrUndefined(callback)) {
callback.apply(callback, [].slice.call(arguments, 1));
}
};
答案 1 :(得分:0)
您可以从Tizen IDE在线样本应用程序获得帮助。 您将获得Tizen Web App File Manager App的帮助。
并查看Tizen的Filesystem API。 要获取文件管理器在线示例,