輸入輸出錯誤

提供 IO 錯誤的事件處理常式與錯誤訊息。

在行動裝置上,網路的可靠性會比連接至高速網際網路的桌上型電腦低。在行動裝置上存取外部內容具有兩項限制:可用性與速度。因此,請確定資源是輕量型,並為每個 IO_ERROR 事件加入處理常式,以提供回應給使用者。

例如,想像使用者正在行動裝置上瀏覽您的網站,但是兩個捷運站之間的網路連線突然中斷。而連線中斷時,正在載入動態資源。在桌上型電腦上,您可以使用空白事件偵聽程式來避免顯示執行階段錯誤,因為這種情況幾乎不會發生。不過,在行動裝置上,您不只需要一個簡單的空白偵聽程式來處理該情況。

下列程式碼不會回應 IO 錯誤。請勿按照以下所示來使用它:

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete ); 
addChild( loader ); 
loader.load( new URLRequest ("asset.swf" ) ); 
  
function onComplete( e:Event ):void 
{ 
    var loader:Loader = e.currentTarget.loader; 
    loader.x = ( stage.stageWidth - e.currentTarget.width ) >> 1; 
    loader.y = ( stage.stageHeight - e.currentTarget.height ) >> 1; 
}

較佳的作法是處理這類型的失敗,並提供錯誤訊息給使用者。下列程式碼會正確地處理它:

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener ( Event.COMPLETE, onComplete ); 
loader.contentLoaderInfo.addEventListener ( IOErrorEvent.IO_ERROR, onIOError ); 
addChild ( loader ); 
loader.load ( new URLRequest ("asset.swf" ) ); 
 
function onComplete ( e:Event ):void 
{ 
      var loader:Loader = e.currentTarget.loader; 
      loader.x = ( stage.stageWidth - e.currentTarget.width ) >> 1; 
      loader.y = ( stage.stageHeight - e.currentTarget.height ) >> 1; 
} 
 
function onIOError ( e:IOErrorEvent ):void 
{ 
      // Show a message explaining the situation and try to reload the asset. 
      // If it fails again, ask the user to retry when the connection will be restored 
}

最好的作法是,記得提供使用者再次載入內容的方法。您可以在 onIOError() 處理常式中實作這個行為。