Adobe Air (wiwobooks.com Release)
Ereignis, das Sie mithilfe eines Ereignis-Listeners registrieren müssen, ist auch hier wie üblich über eine Klassenkonstante definiert: ProgressEvent.PROGRESS . Dies wird wiederholt so lange ausgelöst, bis die Datei komplett geladen ist (Sie wissen schon: Danach kommt das Ereignis Event.COMPLETE ). Das ProgressEvent -Objekt kommt mit einer Eigenschaft bytesLoaded daher, mithilfe der Sie die Anzahl der bereits abgerufenen Bytes ermitteln können. Diese Eigenschaft ist hilfreich, wenn Sie eine Rückmeldung geben wollen, wie weit das Laden der Datei schon gediehen ist.
Wenn Sie die Anzahl der abzurufenden Bytes mit der Gesamtgröße der Datei vergleichen wollen, können Sie mit der Eigenschaft bytesTotal des ProgressEvent - Objekts die Gesamtzahl der abzurufenden Bytes abfragen.
Die target -Eigenschaft des ProgressEvent -Objekts verweist auf das geladene Objekt, in diesem Fall also auf die FileStream -Instanz, deren asynchrones Öffnen Sie veranlasst haben. Der Typ der target -Eigenschaft ist ein simples Objekt, sodass Sie es erst explizit in ein FileStream -Objekt typwandeln müssen, damit Sie es als FileStream -Objekt verwenden können. Das erleichtert das Schreiben von generischem Quelltext, sodass Sie den Ereignis-Listener nicht auf eine einzelne Datei zuschneiden müssen. Die verfügbaren Daten rufen Sie wie gewohnt mithilfe der bytesAvailable -Eigenschaft der FileStream -Instanz aus dem Lesepuffer ab. Sie können innerhalb des Ereignis-Listeners Bytes im Lesepuffer mithilfe einer der read…() -Methoden der FileStream -Instanz auslesen oder auch nicht – nicht ausgelesene Bytes bleiben bis zum nächsten Durchlauf im Lesepuffer.
Hinweis
Beachten Sie, dass das Auslesen von Daten im ProgressEvent.PROGRESS -Listener Auswirkungen auf die verfügbaren Daten im Event.COMPLETE -Listener hat: Wenn Sie die Daten bereits abgerufen haben, wird die Eigenschaft bytesAvailable der FileStream - Instanz gleich 0 sein.
Speichern
Für das Schreiben steht das Ereignis OutputProgressEvent.OUTPUT_PROGRESS zur
Verfügung. Entsprechend dem Ereignis ProgressEvent.PROGRESS beim Laden wird dieses Ereignis kontinuierlich ausgelöst, bis die Schreiboperation abgeschlossen ist. Für den Fall, dass Sie den Status des Schreibprozesses erfahren möchten, verfügt das OutputProgressEvent -Objekt über die Eigenschaft bytesPending , die die Anzahl der noch zu schreibenden Bytes angibt. Auch das OutputProgressEvent -Objekt verfügt über die Eigenschaft bytesTotal , die die Gesamtanzahl der zu schreibenden Bytes (das heißt bereits geschrieben und noch zu schreiben) der Datei repräsentiert. Im Normalfall ist es jedoch meist nicht nötig, die Schreibergebnisse abzufangen. Da AIR vor dem Schließen der FileStream -Instanz alle anstehenden Schreiboperationen ausführt, reicht es aus, wenn Sie das Schließen der FileStream -Instanz und etwaige IOErrorEvent -Fehlerereignisse mit Ereignis-Listenern überwachen.
12.5.4 Auf Dateisystemereignisse reagieren
Nachdem Sie in den vorherigen Abschnitten die einzelnen Ereignisse im Zusammenhang mit dem Dateisystem kennengelernt haben, ist es an der Zeit, sich den asynchronen Abruf von Daten einmal im Gesamtkontext anzusehen.
Lösungsweg
1. FileStream -Instanz erstellen, fileMode -Parameter
FileMode.READ
Lesen
FileMode.WRITE
Löschen und Schreiben
FileMode.APPEND
Schreiben (Anhängen)
FileMode.UPDATE
Lesen/Schreiben
2. Ereignis-Listener registrieren
IOError.IO_ERROR
Zugriffsfehler
ProgressEvent.PROGRESS
Ladefortschritt
Event.COMPLETE
Abschluss des Ladens
OutputProgressEvent.OUTPUT_PROGRESS
Speicherfortschritt
Event.CLOSE
Schließen der Datei
3. FileStream -Methode load() aufrufen, File -Instanz für die Ressource der Datei als Parameter
So geht es
Im nachfolgenden Beispiel einer Flex-basierten AIR-Anwendung wird eine Datei asynchron geöffnet und bei jedem Auslösen des Fortschrittereignisses eine Label -Komponente, die den Ladefortschritt anzeigt, aktualisiert sowie der bisher geladene Text angezeigt. Nach dem Abschluss der Leseoperation wird noch das Label mit einer Abschlussmeldung aktualisiert und die FileStream -Instanz geschlossen:
import mx.controls.Alert;
private var myFile:File = new File();
private var myFileStream:FileStream = new FileStream(); private function init():void {
myFile = File.applicationDirectory.
Weitere Kostenlose Bücher