良く考えたら、タイトルは 「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

コメントする