Adobe Air (wiwobooks.com Release)
größere Anwendung programmieren, sollten Sie in Erwägung ziehen, eine oder mehrere eigene Klassen zu erstellen, die den Dateisystemzugriff inklusive Fehlerbehandlung zentralisiert übernehmen und bei denen die Zuordnung zwischen File - und FileStream -Instanzen gut aufgehoben ist, ohne dass andere Teile Ihrer Anwendung etwas über das Dateisystem wissen müssen.
12.5.2 Erfolgsereignis der Datenoperation
Wenn die Datei komplett geladen wurde, löst die FileStream -Instanz ein Ereignis Event.COMPLETE aus, das Sie mit einem Ereignis-Listener abfangen müssen. Die zugehörige FileStream -Instanz ist in der target -Eigenschaft des Ereignisobjekts gespeichert, sodass Sie dieses als FileStream typwandeln können, wenn Sie eine enge Kopplung zwischen Ereignis-Listener und dem Rest Ihrer Anwendung vermeiden wollen.
Lösungsweg
1. FileStream -Instanz für File -Objekt erstellen
2. Ereignis-Listener für Event mit der Methode addEventListener() der FileStream -Instanz einrichten
3. FileStream -Instanz mit openAsync() öffnen
4. Im Ereignis-Listener: Daten verarbeiten und Ereignis-Listener entfernen
Stolperfallen/Caveats
Beachten Sie, dass das Ereignis Event.COMPLETE nach jeder asynchronen Datenoperation ausgelöst wird, sobald diese abgeschlossen ist. Eine FileStream -Instanz sammelt die anstehenden Schreiboperationen und führt diese erst aus, sobald Sie die close() -Funktion der FileStream -Instanz aufrufen. Das bewirkt, dass der Ereignis-Listener nach Abschluss der letzten Schreiboperation noch einmal ausgeführt wird, wenn er noch registriert ist.
So geht es
Das folgende Beispiel erweitert Listing 12.6 aus dem letzten Abschnitt 12.5.1 um den Ereignis- Listener fur das komplette Laden der Datei. Ist die Datei komplett geladen, werden hier Lese- und Schreiboperationen ausgeführt. Der Dateimodus wurde dazu auf FileMode.UPDATE geändert. Beachten Sie, dass der Positionszeiger auf 0 gesetzt wird, bevor in die Datei zurückgeschrieben wird, damit bestehende Daten ersetzt und nicht angehängt werden. Die Änderungen gegenüber dem letzten Beispiel sind in fett hervorgehoben (Auf einen Ereignis-Listener, der den Erfolg der Schreiboperation überprüft, wurde der Einfachheit halber verzichtet. Vielleicht ist das ja eine gute Übung für Sie?):
creationComplete="init()">
private var myFile:File = File.applicationStorageDirectory. resolvePath("myFile.txt");
private var myFileStream:FileStream = new FileStream();
private function init():void {
myFileStream.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
myFileStream.addEventListener(Event.COMPLETE, handleReadComplete);
myFileStream.openAsync(myFile, FileMode.UPDATE ); }
private function handleIOError(e:IOErrorEvent):void { taDebug.text = "Es gab einen Fehler beim Zugriff auf " + myFile.nativePath+":\n\n" + e.text;
}
private function handleReadComplete(e:Event):void { // Ereignis-Listener entfernen (hat seinen // Zweck erfüllt)
myFileStream.removeEvent-Listener(Event.COMPLETE,
handleReadComplete);
taDebug.text = myFileStream.readMultiByte(myFileStream.
bytesAvailable, "utf-8");
taDebug.text += "\nnoch eine Zeile dazu!"; myFileStream.position = 0;
myFileStream.writeMultiByte(taDebug.text, "utf-8"); myFileStream.close();
}
]]>
Listing 12.7 Beispiel: Ereignis-Listener für Event.COMPLETE, ausgelöst durch FileStream
Das Ergebnis sehen Sie in Abbildung 12.3. Abbildung 12.3 Asynchrones Einlesen von Daten (COMPLETE-Event)
12.5.3 Fortschrittsereignis der Datenoperation
Wie in Abschnitt 12.1 geschildert liegt ein wesentlicher Vorteil des asynchronen Zugriffs darin, dass Sie nicht auf das Laden der kompletten Datei warten müssen, wenn Sie diese abrufen – was insbesondere bei großen Dateien ins Gewicht fällt. Allerdings nützte dieser Ansatz nichts, gäbe es nicht auch zwischendurch – also nach Beginn des Ladens bis hin zu dessen endgültigem Abschluss – Ereignisse, auf die Sie reagieren könnten.
Laden
Für das Laden einer Datei findet bei AIR die Ereignisklasse ProgressEvent Anwendung, die Ihnen dann bekannt sein wird, wenn Sie bereits Erfahrung mit dem Abruf von entfernten Informationen aus Flex- oder Flash-Anwendungen gesammelt haben. Das
Weitere Kostenlose Bücher