良く考えたら、タイトルは 「Flash Player 10.1 と AIR 2 の...」 にすべきでした。
という話は置いておいて、
非同期で行われる処理の場合 (ネットワーク経由のダウンロードとか)、エラーの通知も非同期に行われます。その際、エラーの発生はイベントという手段で通知されます。そのため、非同期エラーの処理は、非同期処理を行うクラスにイベントハンドラーを追加する、という形になります。
非同期エラーを通知するイベントは、以下の 2 種類に分けることができます。
- ErrorEvent のサブクラスによる通知
エラーの種類ごとに提供されるイベントクラスを使用。AsyncErrorEvent、IOErrorEvent など。(一覧はこの 記事の最後にあります) - ステータス通知イベントの属性値による通知
NetStatusEvent や StatusEvent の属性値を使用。info.level もしくは level 属性の値が error になる。
ネットワーク関連のクラスは、両方の手段を使います。
それぞれ簡単な例を挙げておきます。
ErrorEvent のサブクラスによる通知の例
まず、ErrorEvent の例から。
var loader:URLLoader; var request:URLRequest; loader = new URLLoader(); // イベントリスナーの追加 loader.addEventListener(IOErrorEvent.IO_ERROR, onError); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); // ファイルの読み込み request = new URLRequest(); request.url = "myfile.xml"; loader.load(request); // 非同期エラーの処理用ハンドラー function onError(event:ErrorEvent):void { trace("Error: " + event.text); if(event is IOErrorEvent) { request.url = "http://www.myserver.jp/myfile.xml"; loader.load(request); } }
ErrorEvent は text 属性にエラー情報を示すテキストが設定されます。その他は見ての通り、普通のイベント処理とおんなじです。というか、特に意識する必要もないかんじですね。
ステータス通知イベントの例
次に、ステータス通知の例です。
このパターンを持つクラスは、以下の 8 つです。(だと思います - とりあえず今のところ)
- NetStatusEvent.info.level
- StatusEvent.level
こちらもサンプルです。
var videoURL:String = "video.flv"; var nc:NetConnection; nc = new NetConnection(); nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); nc.connect(null); function onNetStatus(event:NetStatusEvent):void { if (event.info.level == "error") { trace("NetStatusError: " + event); // その他必要な処理を記述 } else { // event.info.code の値に応じて適当な処理を記述 } } function onSecurityError(event:SecurityErrorEvent):void { trace("SecurityError: " + event); }
ステータス通知の場合は、level の値が error かどうかで、エラーの発生を判断します。
エラーイベント一覧
最後に非同期エラー関連のイベント一覧です。
- ErrorEvent
- AsyncErrorEvent
- DownloadErrorEvent
- DRMAuthenticationErrorEvent
- DRMErrorEvent
- IOErrorEvent
- SecurityErrorEvent
- SkinErrorEvent
- SQLErrorEvent
- StatusFileUpdateErrorEvent
- StatusUpdateErrorEvent
コメントする