Tizen Web 应用程序可穿戴:TypeMismatchError
Tizen Web Application Wearable :TypeMismatchError
获得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 复制粘贴,但仍然无法正常工作。
请帮忙。预先感谢!!
另外,当我浏览我的可穿戴设备的文件系统时,我在哪里可以找到 "documents" 目录。
您可以从 Tizen IDE 在线示例应用程序获得帮助。
File Manager App Tizen Web App 将为您提供帮助。
并查看 Tizen 的 Filesystem API。
要获取文件管理器在线示例,
- 转到新 Web 项目
- 在线示例
- 查找文件管理器
演示:
简单答案将 this
更改为 fileHandler
。
当您的函数在 tizen API 中被调用时,请不要相信 "this"。
您似乎使用 checkCorruptedRemovableDrives
成功回调 tizen.filesystem.listStorages
。
并且您信任 checkCorruptedRemovableDrives
中的 "this" 是 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);
};
NativeManager.prototype.callIfPossible = function(callback) {
if (!_type.isNullOrUndefined(callback)) {
callback.apply(callback, [].slice.call(arguments, 1));
}
};
获得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 复制粘贴,但仍然无法正常工作。
请帮忙。预先感谢!! 另外,当我浏览我的可穿戴设备的文件系统时,我在哪里可以找到 "documents" 目录。
您可以从 Tizen IDE 在线示例应用程序获得帮助。 File Manager App Tizen Web App 将为您提供帮助。
并查看 Tizen 的 Filesystem API。 要获取文件管理器在线示例,
- 转到新 Web 项目
- 在线示例
- 查找文件管理器
演示:
简单答案将 this
更改为 fileHandler
。
当您的函数在 tizen API 中被调用时,请不要相信 "this"。
您似乎使用 checkCorruptedRemovableDrives
成功回调 tizen.filesystem.listStorages
。
并且您信任 checkCorruptedRemovableDrives
中的 "this" 是 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);
};
NativeManager.prototype.callIfPossible = function(callback) {
if (!_type.isNullOrUndefined(callback)) {
callback.apply(callback, [].slice.call(arguments, 1));
}
};