私はこれを考え出すのに少し苦労しています。ループ内のAS3イベントリスナー
ローカルディレクトリからサーバーにファイルをアップロードするAir/Flashアプリケーションを作成しています(ユーザーの操作なし)。 フォルダにあるファイルの配列を作成していて、問題なくアップロードできます。 しかし、イベントリスナーを追跡することはできません。つまり、各アップロードのイベントリスナーの前でforループが完了することを意味します。
イベントリスナーを追跡し、最後のイベントリスナーがいつ終了したかを確認する方法はありますか?
すべてのヘルプは大歓迎です...ここで
は私のコードです:public var UPLOAD_URL:String = "http://myhost/dev/uptest.php";
upbtn.addEventListener(MouseEvent.CLICK, uploadme);
public function uploadme(event:MouseEvent):void
{
preloader.visible = true;
var desktop:File = File.applicationStorageDirectory.resolvePath("photo");
var files:Array = desktop.getDirectoryListing();
for (var i:uint = 0; i < files.length; i++)
{
var date:Date = new Date(); // get new date
var mytime:Number = Math.round(date.valueOf()/1000);
var ur:URLRequest = new URLRequest();
var uv:URLVariables = new URLVariables();
uv.filename = files[i].name;
ur.data = uv;
ur.method = URLRequestMethod.POST;
ur.url = UPLOAD_URL;
files[i].addEventListener(ProgressEvent.PROGRESS, updateProgress);
files[i].addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doneUpload);
files[i].addEventListener(IOErrorEvent.IO_ERROR, fileError);
files[i].upload(ur);
//trace(i)
function updateProgress(event:ProgressEvent):void
{
//wait preloader.visible = true;
//trace(event.currentTarget.name);
}
function doneUpload(event:DataEvent):void
{
//var loader2: URLLoader = URLLoader(event.target);
//trace(i);
trace(event.data);
//preloader.visible = false;
}
function fileError(event:IOErrorEvent):void
{
trace("error");
}
}
}
このようにしなければなりません。十分なローダーを作成し、それらを構造体にリンクし、 'doneUpload'リスナーでその構造体に行き、' event.target'を終了としてマークし、すべてが終了していれば構造体をチェックします。 – Vesper
私はあなたがここで何をしようとしているのかについて100%明確ではありません。すべてのファイルがアップロードされるまで、UIを「待機」状態にしますか?アップロードが完了したら、各ファイルに固有の処理を行いますか?他に何か? – Brian
私がやろうとしているのは、アップロードが完了している間にプリローダーを表示し、最後のファイルがアップロードされたときにプリロードを無効にすることです。 – cnapsys