我正在尝试创建一个ionicv1应用程序,该应用程序包括填写表单并将其保存到文件中,并且每次将新内容写入文件时,都会使用cordova文件插件读取文件。我正在尝试使用these个示例,但它们对我不起作用,我也不知道为什么。
这是我的文件写入功能:
function writeToFile(fileName, data) {
data = JSON.stringify(data, null, '\t');
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(directorEntry) {
directorEntry.getFile(filename, { create: true }, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function(e) /* E */ {
//Success callback
document.getElementById("testwrite").innerHTML = "Write successful";
};
fileWriter.onerror = function(e) /* E */ {
//Error callback
document.getElementById("testwrite").innerHTML = "Write unsuccessful";
};
var blob = new Blob([data], { type: 'text/plain' });
fileWriter.write(blob);
});
});
});
}
它在我的页面上没有显示“写入成功”或“写入不成功”,因此显然由于某种原因它并没有实现那么远,但是writeToFile函数本身正在被调用。 我在另一个函数saveJson中调用此函数,当在表单上按Submit时将调用该函数。
function saveJson() {
var exampleArray = {
exampleX: {
'example1' : 'exampleValue1',
'example2' : 'exampleValue2'
}
}
console.log(exampleArray);
writeToFile('jsonfile.json', exampleArray);
}
因此我无法写入文件,但是它也无法识别我的读取功能,尽管那也许是因为文件不是一开始创建的。
这里是阅读功能:
function readFromFile(filename, cb) {
var pathToFile = cordova.file.externalDataDirectory + filename;
window.resolveLocalFileSystemURL(pathToFile, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) /* E */ {
//Success callback
document.getElementById("testread").innerHTML = "Read successful";
}
reader.onerror = function(e) /* E */ {
//Error callback
document.getElementById("testread").innerHTML = "Read unsuccessful";
}
reader.readAsText(file);
});
});
}
被这样称呼的:
var shiftData;
readFromFile('shifts.json', function(data) {
shiftData = data;
});
同样,它不会在我的页面上显示“读取成功”或“读取失败”,但是如果写作可行,我可能会自行解决。
所有测试都是在我的实际Android设备Pixel 2 XL上进行的,而不是仿真程序,尽管那没有什么不同。
答案 0 :(得分:0)
我最终使用了一个不同的教程,并做了一些改动。
在我的app.js文件(位于HTML页面顶部)中,添加以下代码:
var jsonFile;
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(dir) {
dir.getFile('example.json', { create: true }, function(file) {
jsonFile = file;
});
});
}
哪个给了我一个文件,可以使用jsonFile变量在其他JS文件中加载(在我的body标签末尾之前的底部加载)。
我的writeToFile函数现在看起来像这样:
function writeToFile(data) {
if (jsonFile == undefined) {
alert("File is undefined")
} else {
var jsonData = JSON.stringify(data);
jsonFile.createWriter(function(fileWriter) {
fileWriter.seek(fileWriter.length);
var blob = new Blob([jsonData], { type: 'text/plain' });
fileWriter.write(blob);
alert("writeToFile is successful!";)
});
}
}
首先,我们检查是否已定义文件,但应该以防万一。
然后我们将数据转换为有效的JSON数据。
我们创建一个fileWriter并使用seek将数据附加到文件末尾。
我们创建一个blob来放置JSON并将该blob写入文件中。