Recipe 19.4. Checking Load Progress


Problem

You want to know how much of the data has loaded.

Solution

Subscribe to the progress event of the URLLoader.

Discussion

The URLLoader class has a progress event that is dispatched whenever progress is made in downloading data. The Flash Player passes a flash.events.ProgressEvent instance to the event handler, allowing you to inspect the bytesLoaded and bytesTotal properties of the event. The bytesLoaded property contains the number of bytes that have been received so far. The bytesTotal property contains the total number of bytes in the file being loaded, or zero if the information is unknown.

The data is fully loaded when the bytesLoaded property of the ProgressEvent is the same as the bytesTotal property. However, this is usually not something you check in your progress event handler. Instead, listen for the complete event, which is dispatched when the data is fully loaded. See Recipes 19.1, 19.2, and 19.3 for examples of handling the complete event.

To check on the loading progress, use code like the following:

package {   import flash.display.*;   import flash.text.*;   import flash.events.*   import flash.net.*;      public class CheckProgressExample extends Sprite {     private var _output:TextField;        public function CheckProgressExample(  ) {       initializeOutput(  );       loadData(  );     }          private function initializeOutput(  ):void {       _output = new TextField( );       _output.width = stage.stageWidth;       _output.height = stage.stageHeight;              addChild( _output );         }          private function loadData(  ):void {       var loader:URLLoader = new URLLoader(  );              // Listen for the progress event to check download progress       loader.addEventListener( ProgressEvent.PROGRESS, handleProgress );              loader.load( new URLRequest( "example.txt" ) );     }          private function handleProgress( event:ProgressEvent ):void {       // Calculate the percentage by multiplying the loaded-to-total        // ratio by 100       var percent:Number = Math.round( event.bytesLoaded                                         / event.bytesTotal * 100 );              _output.text = " Loaded: " + event.bytesLoaded + "\n"                         + "  Total: " + event.bytesTotal + "\n"                         + "Percent: " + percent;     }   } }

In practice, it's fairly unlikely that you'll need to actually monitor the loading of data via the progress event. It is only plausibly necessary in cases of very large amounts of data being downloaded.

When using URLLoader, you cannot read the data while the download is in progress. The progress event is simply a notification of download progress because of this behavior. To access the data as it downloads, use URLStream, as discussed in Recipe 19.5.

See Also

Recipes 19.1, 19.2, 19.3, and 19.5




ActionScript 3. 0 Cookbook
ActionScript 3.0 Cookbook: Solutions for Flash Platform and Flex Application Developers
ISBN: 0596526954
EAN: 2147483647
Year: 2007
Pages: 351

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net