cordova 3.1.0-0.2.0
ドロイド Razr M
Android 4.1.2
Windows 7
PhoneGap/Cordova の新機能。http://docs.phonegap.com/en/3.1.0/cordova_file_file.md.html#Fileからファイルシステム デモの 1 つを実行します。「cordova run android」を使用してコードをコンパイルし、USB 経由で接続された電話で実行します。
問題 #1: アプリを最初に起動すると、アラート ("1") が 2 回表示され、その後は何も表示されません。
問題 #2: ボタン onclick を使用してコードを開始すると、次のアラート パターンが表示されます: 1、2、2、3、3、4、6、5、7、4、6、5、7。コードフローに基づくと理にかなっていますが、それらのほとんどは 2 回起動しています。
問題#2は、最初の試行からぶら下がっている非同期呼び出しが原因であると思われますが、どれだけ待っても、ボタンを介してコードを開始するまでこれらのイベントは発生しません。
では、deviceready を待機しているにもかかわらず、requestFileSystem 呼び出しが失敗するのはなぜですか? また、他のコードが混ざり合っているのはなぜですか?
どんな考えでも大歓迎です。
<!DOCTYPE html>
<html>
<head>
<title>FileReader Example</title>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// device APIs are available
//
function onDeviceReady() {
alert("1");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
alert("2");
fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
alert("3");
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
alert("4");
readDataUrl(file);
alert("5");
readAsText(file);
}
function readDataUrl(file) {
alert("6");
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log("Read as data URL");
console.log(evt.target.result);
};
reader.readAsDataURL(file);
}
function readAsText(file) {
alert("7");
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log("Read as text");
console.log(evt.target.result);
};
reader.readAsText(file);
}
function fail(error) {
alert("8");
console.log(error.code);
}
</script>
</head>
<body>
<h1>Example</h1>
<p>Read File</p>
<button onclick="onDeviceReady();">Read File</button>
</body>
</html>