Eingabe-/Ausgabefehler

Implementieren Sie Ereignisprozeduren und Fehlermeldungen für E/A-Fehler.

Das Netzwerk ist bei Mobilgeräten oft weniger zuverlässig als bei einem Desktopcomputer, der über eine Internetverbindung mit hoher Geschwindigkeit verfügt. Der Zugriff auf externe Inhalte bei Mobilgeräten unterliegt zwei Einschränkungen: Verfügbarkeit und Geschwindigkeit. Deshalb sollten Sie Bestände verwenden, die möglichst wenig Ressourcen belegen, und Prozeduren für jedes IO_ERROR-Ereignis hinzufügen, damit die Benutzer Fehlermeldungen erhalten.

Angenommen, ein Benutzer hat Ihre Website von einem mobilen Gerät aus aufgerufen, aber die Netzwerkverbindung wird zwischen zwei U-Bahn-Haltestellen unterbrochen. Zu diesem Zeitpunkt wurde gerade ein dynamischer Bestand geladen. Da dieses Szenario auf einem Desktop praktisch nie auftritt, können Sie dort einen leeren Ereignis-Listener verwenden, um zu verhindern, dass ein Laufzeitfehler eingeblendet wird. Auf einem Mobilgerät ist ein leerer Ereignis-Listener dagegen unzureichend.

Der folgende Code reagiert nicht auf einen E/A-Fehler. Verwenden Sie den Code nicht in der gezeigten Form:

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; 
}

Stattdessen sollte für eine derartige Fehlersituation eine Prozedur implementiert werden, die eine Fehlermeldung für den Benutzer einblendet. Mit dem folgenden Code wird angemessen auf den Fehler reagiert:

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 
}

Es empfiehlt sich, dem Benutzer die Möglichkeit zu geben, den Inhalt erneut zu laden. Dieses Verhalten kann über die onIOError() -Prozedur implementiert werden.