Getting bitmapdata from url too much oncomplete handlers - Actionscript

64 Views Asked by At

there is a function i use, that i created that should get the bitmapdata and send it back from the urls of a object. I track how many times the function is called: the d variable, and how many times it comes back, it should of course be equal, but it isnt.

Here's the function i use. it checks if there are multiple attachments in one object, then loads the bitmap, and if the amount of attachments equals the amount it should have it sends an array with the bitmaps back to the function:

private function get_bitmap(url:String,urlObject:Object, on_complete:Function):void{
                d++;

                //trace("get_bitmap");
                if(url == geenImage){
                    trace("geenImage");
                    loaderGeenImage.load(new URLRequest(geenImage));
                }
                else{
                    if(urlObject.length == 1){
                        var url11:String = url +urlObject[0].id;
                        loader1.load(new URLRequest(url11));
                        loader1int++;

                    }
                 if(urlObject.length == 2){
                    loader2int++;
                        var url21:String = url +urlObject[0].id;
                        loader2.load(new URLRequest(url21));
                        var url22:String = url +urlObject[1].id;
                        loader2.load(new URLRequest(url22));
                    }
                 if(urlObject.length == 3){
                        var url31:String = url +urlObject[0].id;
                        loader3.load(new URLRequest(url31));
                        var url32:String = url +urlObject[1].id;
                        loader3.load(new URLRequest(url32));
                        var url33:String = url +urlObject[2].id;
                        loader3.load(new URLRequest(url33));
                    }
                 if(urlObject.length == 4){
                        var url41:String = url +urlObject[0].id;
                        loader4.load(new URLRequest(url41));
                        var url42:String = url +urlObject[1].id;
                        loader4.load(new URLRequest(url42));
                        var url43:String = url +urlObject[2].id;
                        loader4.load(new URLRequest(url43));
                        var url44:String = url +urlObject[3].id;
                        loader4.load(new URLRequest(url44));
                    }
                 if(urlObject.length == 5){
                        var url51:String = url +urlObject[0].id;
                        loader5.load(new URLRequest(url51));
                        var url52:String = url +urlObject[1].id;
                        loader5.load(new URLRequest(url52));
                        var url53:String = url +urlObject[2].id;
                        loader5.load(new URLRequest(url53));
                        var url54:String = url +urlObject[3].id;
                        loader5.load(new URLRequest(url54));
                        var url55:String = url +urlObject[4].id;
                        loader5.load(new URLRequest(url55));
                    }
                 if(urlObject.length == 6){
                        var url61:String = url +urlObject[0].id;
                        loader6.load(new URLRequest(url61));
                        var url62:String = url +urlObject[1].id;
                        loader6.load(new URLRequest(url62));
                        var url63:String = url +urlObject[2].id;
                        loader6.load(new URLRequest(url63));
                        var url64:String = url +urlObject[3].id;
                        loader6.load(new URLRequest(url64));
                        var url65:String = url +urlObject[4].id;
                        loader6.load(new URLRequest(url65));
                        var url66:String = url +urlObject[5].id;
                        loader6.load(new URLRequest(url66));
                    }
                else{
                        trace("anders" + urlObject.length);
                    }

                }



                loaderGeenImage.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{
                        var bitmap:Bitmap = (e.target).content;
                        var data:BitmapData = bitmap.bitmapData;
                        geenImageArray.push(data);
                        if(geenImageArray.length == 1){
                        on_complete(geenImageArray);
                        geenImageArray= [];
                        }
                    });
                loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{
                    //var loader:URLLoader = URLLoader(e.target);
                    var bitmap:Bitmap = (e.target).content;
                    var data:BitmapData = bitmap.bitmapData;
                    //trace("bitmapcomplete");
                    imageArray1.push(data);
                        if(imageArray1.length == 1){
                            trace("imageArray1 gelijk");
                            on_complete(imageArray1);
                            imageArray1= [];
                        }

                });
                loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{
                    //var loader:URLLoader = URLLoader(e.target);
                    var bitmap:Bitmap = (e.target).content;
                    var data:BitmapData = bitmap.bitmapData;
                    //trace("bitmapcomplete");
                    imageArray2.push(data);
                    //trace("url object  lengte is " + urlObject.length);

                    if(imageArray2.length == 2){
                        trace("imageArray2 gelijk");
                        on_complete(imageArray2);
                        imageArray2= [];

                    }

                });
                loader3.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{

                    //var loader:URLLoader = URLLoader(e.target);
                    var bitmap:Bitmap = (e.target).content;
                    var data:BitmapData = bitmap.bitmapData;
                    //trace("bitmapcomplete");
                    imageArray3.push(data);
                    //trace("url object  lengte is " + urlObject.length);

                    if(imageArray3.length == 3){
                        trace("imageArray3 gelijk");
                        on_complete(imageArray3);
                        imageArray3= [];

                    }

                });
                loader4.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{

                    //var loader:URLLoader = URLLoader(e.target);
                    var bitmap:Bitmap = (e.target).content;
                    var data:BitmapData = bitmap.bitmapData;
                    //trace("bitmapcomplete");
                    imageArray4.push(data);
                    //trace("url object  lengte is " + urlObject.length);

                    if(imageArray4.length == 4){
                        trace("imageArray4 gelijk");
                        on_complete(imageArray4);
                        imageArray4= [];

                    }

                });
                loader5.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{

                    //var loader:URLLoader = URLLoader(e.target);
                    var bitmap:Bitmap = (e.target).content;
                    var data:BitmapData = bitmap.bitmapData;
                    //trace("bitmapcomplete");
                    imageArray5.push(data);
                    //trace("url object  lengte is " + urlObject.length);

                    if(imageArray5.length == 5){
                        trace("imageArray5 gelijk");
                        on_complete(imageArray5);
                        imageArray5= [];

                    }

                });
                loader6.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{

                    //var loader:URLLoader = URLLoader(e.target);
                    var bitmap:Bitmap = (e.target).content;
                    var data:BitmapData = bitmap.bitmapData;
                    //trace("bitmapcomplete");
                    imageArray6.push(data);
                    //trace("url object  lengte is " + urlObject.length);

                    if(imageArray6.length == 6){
                        trace("imageArray6 gelijk");
                        on_complete(imageArray6);
                        imageArray6= [];

                    }

                });

            }

Here's the function that calls it:

get_bitmap(bitmapString,imageObject, function(imageArray:Array):void {
                                 intje++;
                                 trace("getBitmap teruggestuurd "+intje + "waarvan 1 image " + loader1int+ "waarvan 2 images " +loader2int);
                                 trace("getbitmap aangeroepen is "+d);

and here's my log:

lengte is 20 anders1 anders1 geenImage anders1 anders1 getBitmap teruggestuurd 1waarvan 1 image 4waarvan 2 images 0 getbitmap aangeroepen is 5 0 getBitmap teruggestuurd 2waarvan 1 image 4waarvan 2 images 0 getbitmap aangeroepen is 5 1 getBitmap teruggestuurd 3waarvan 1 image 4waarvan 2 images 0 getbitmap aangeroepen is 5 2 getBitmap teruggestuurd 4waarvan 1 image 4waarvan 2 images 0 getbitmap aangeroepen is 5 3 getBitmap teruggestuurd 5waarvan 1 image 4waarvan 2 images 0 getbitmap aangeroepen is 5 4 anders1 anders2 anders2 anders1 anders1 anders1 anders1 anders1 anders1 anders1 anders2 anders1 anders1 anders1 anders1 imageArray2 gelijk getBitmap teruggestuurd 6waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 5 imageArray2 gelijk getBitmap teruggestuurd 7waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 6 imageArray2 gelijk getBitmap teruggestuurd 8waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 7 imageArray2 gelijk getBitmap teruggestuurd 9waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 8 imageArray2 gelijk getBitmap teruggestuurd 10waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 9 imageArray2 gelijk getBitmap teruggestuurd 11waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 10 imageArray2 gelijk getBitmap teruggestuurd 12waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 11 imageArray2 gelijk getBitmap teruggestuurd 13waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 12 imageArray2 gelijk getBitmap teruggestuurd 14waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 13 imageArray2 gelijk getBitmap teruggestuurd 15waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 14 imageArray1 gelijk getBitmap teruggestuurd 16waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 15 imageArray1 gelijk getBitmap teruggestuurd 17waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 16 imageArray1 gelijk getBitmap teruggestuurd 18waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 17 imageArray1 gelijk getBitmap teruggestuurd 19waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 18 imageArray1 gelijk getBitmap teruggestuurd 20waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 19 gelijk dude imageArray1 gelijk getBitmap teruggestuurd 21waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 0 imageArray1 gelijk getBitmap teruggestuurd 22waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 1 imageArray1 gelijk getBitmap teruggestuurd 23waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 2 imageArray1 gelijk getBitmap teruggestuurd 24waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 3 imageArray1 gelijk getBitmap teruggestuurd 25waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 4 imageArray1 gelijk getBitmap teruggestuurd 26waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 5 imageArray1 gelijk getBitmap teruggestuurd 27waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 6 imageArray1 gelijk getBitmap teruggestuurd 28waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 7 imageArray1 gelijk getBitmap teruggestuurd 29waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 8 imageArray1 gelijk getBitmap teruggestuurd 30waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 9 imageArray1 gelijk getBitmap teruggestuurd 31waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 10 imageArray1 gelijk getBitmap teruggestuurd 32waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 11 imageArray1 gelijk getBitmap teruggestuurd 33waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 12 imageArray1 gelijk getBitmap teruggestuurd 34waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 13 imageArray1 gelijk getBitmap teruggestuurd 35waarvan 1 image 16waarvan 2 images 3 getbitmap aangeroepen is 20 14
1

There are 1 best solutions below

0
On

The load method of a loader is asynchronous. That means it takes some time to perform, and the code execution is not 'waiting' for it. (That why we are working with events ...)

So when you do this :

                    var url21:String = url +urlObject[0].id;
                    loader2.load(new URLRequest(url21));
                    var url22:String = url +urlObject[1].id;
                    loader2.load(new URLRequest(url22));

You start a loading on loader2 (url21), then immediately start a new loading (url22), stopping the first load, and thus only get one 'COMPLETE' event (for url22).

Ik hoop dat het help ;)