コードバ 2.2.0 を使用して eclipse で Android アプリを開発しています。Phonegap のファイル API を取得しているようですが、ファイルの読み書きはできません。
iOS用のアプリを完成させたxcodeからスクリプトをコピーしましたが、動作します。
コンソール出力でトレースされた私のスクリプトは次のとおりです。
window.onload = function (){
console.log('1: onload');
document.addEventListener("deviceready", getSettings, false);
}
function getSettings(){
console.log('2: getSettings()');
fileSys('settings.txt', 'getContent', null);
//fileSys('settings.txt', 'replaceContent', 'new settings');
}
function fileSys(fileName, action, data){
console.log('3: fileSys - '+fileName+' - '+action);
var directory = (fileName == 'sidur') ? 'appin/sidur':'appin';
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
console.log('4: Got file system, get directory...');
fileSystem.root.getDirectory(directory, {create: true}, gotDir, fail);
}
function gotDir(dirEntry) {
console.log('5: Got directory. Get file...');
dirEntry.getFile(fileName, {create: true, exclusive: false}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry){
console.log('6: got file. Perform action: '+action+'...');
if(action == 'getContent') readAsText(fileEntry);
if(action == 'replaceContent') fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer){
console.log('7: got file writer...');
writer.write(data); //function variable of fileSys();
writer.onwriteend = function(evt) {
console.log('8: file written');
};
}
function readAsText(file) {
console.log('7: read as text...');
var reader = new FileReader();
reader.readAsText(file);
reader.onloadend = function(evt) {
console.log('9: done reading file');
init(evt.target.result);
}
}
function fail(error){
console.log('fail: '+error.code);
}
}
function init(settings){
console.log('Init. Settings: '+JSON.stringify(settings));
}
このスクリプトを実行すると、次のコンソール出力が得られます。
- 1: オンロード
- 2: getSettings()
- 3: fileSys - settings.txt - getContent
- 4: ファイルシステムを取得し、ディレクトリを取得...
- 5: ディレクトリを取得しました。ファイルを取得...
- 6: ファイルを取得しました。アクションを実行: getContent...
- 7: テキストとして読む...
そして、そこで止まります。reader.onloadend は呼び出されず、エラーは指定されません。もう一度実行すると、代わりに fileSys('settings.txt', 'replaceContent', 'new settings'); を呼び出します。fileSys への他の呼び出しをアウトコメントすると、コンソールは次のように出力します。
- 1: オンロード
- 2: getSettings()
- 3: fileSys - settings.txt - replaceContent
- 4: ファイルシステムを取得し、ディレクトリを取得...
- 5: ディレクトリを取得しました。ファイルを取得...
- 6: ファイルを取得しました。アクションを実行: replaceContent...
- 7: ファイルライターを取得しました...
私は持っている:
- res/config.xml と android manifest.xml で正しい権限/プラグインを設定します
- Phonegap API が含まれており、機能していることを確認しました (通知あり)
私は日食だけでなくアプリ開発も初めてなので、これは私が見逃した基本的なことかもしれません。どんな提案や指針も大歓迎です。