
guide
Tutti i linguaggi per diventare uno sviluppatore di app per Android.
Utilizziamo la libreria BulkLoader, per gestire caricamenti multipli nei progetti Actionscript 3
Le potenzialità di caricamento di elementi esterni (quali ad esempio video, immagini e suoni) fanno sì che si possano aggiornare facilmente i contenuti e il layout del proprio lavoro senza dover ricompilare il proprio progetto ma semplicemente cambiando i file da esso caricati.
Questo rende necessari alcuni accorgimenti, per esempio può essere necessario creare dei controlli per fare in modo che il filmato parta soltanto una volta completato il caricamento dei dati esterni (specialmente per i progetti in ambito Web dove il tipo di linea influisce sul caricamento), inoltre a seconda del tipo di contenuto da caricare possono essere necessarie azioni diverse; per chi ha a che fare con il caricamento di un buon numero di risorse esterne e vuole semplificare il procedimento di caricamento e controllo degli elementi, un’ottima soluzione è rappresentata dalla classe BulkLoader.
Non si tratta di una classe già presente in Flash, ma è una classe sviluppata da Arthur Debert rilasciata sotto licenza MIT.
I principali vantaggi dell’uso di una classe già “pronta allo scopo” sono in termini di stesura del codice; usando un minor numero di comandi (dovremo imparare solo quelli previsti dalla classe BulkLoader) risparmieremo tempo, inoltre avremo un codice che già prevede molti controlli e quindi non dovremo effettuare test particolari.
Vediamo alcune delle caratteristiche principali della classe BulkLoader:
Le più comuni operazioni di caricamento di file esterni sono completamente gestibili con questa classe, in più sono racchiuse in un numero di comandi ridotto rispetto a quello che ci servirebbe se provassimo a scrivere un codice che si occupi di tutte queste operazioni.
Vediamo allora come utilizzare praticamente questa classe, ovvero come creare un’istanza del BulkLoader, aggiungervi degli elementi da caricare, avviare il caricamento, seguirne il progresso e infine inserire sullo stage uno o più elementi caricati.
Per prima cosa è necessario importare la classe BulkLoader: il suo package di default è br.com.stimuli.loading
, per cui il nostro codice inizierà con:
import br.com.stimuli.loading.*
In questo modo andiamo a importare tutte le classi presenti nel package e avremo completo accesso a metodi, eventi e proprietà del BulkLoader. Dopo aver importato le classi dobbiamo dichiarare un’istanza del BulkLoader; il costruttore della classe prevede anche un parametro di tipo stringa che sarà il nome del nostro BulkLoader e potremo utilizzarlo per ricavarne un riferimento da altre classi.
Per creare un’istanza di tipo BulkLoader basta il seguente codice:
var caricatore: BulkLoader = new BulkLoader(“carica”)
Dalla classe dove dichiariamo l’istanza basterà usare la variabile caricatore
per accedere all’oggetto, mentre da eventuali classi esterne potremo prima creare un riferimento con un codice di questo tipo:
var rif_carica:BulkLoader = BulkLoader.getLoader(“carica”)
Il nome del loader è l’unico parametro obbligatorio ma abbiamo anche due parametri opzionali: il numero massimo di connessioni da aprire simultaneamente e il livello di log; per impostare un loader con un massimo di 5 connessioni simultanee e un log completo di tutti gli eventi possiamo utilizzare questo codice:
var caricatore: BulkLoader = new BulkLoader(“carica”, 5, BulkLoader.LOG_VERBOSE)
Le opzioni disponibili per il livello di logging sono:
Il valore di default è LOG_ERRORS.
A questo punto abbiamo a disposizione un oggetto BulkLoader pronto da popolare, quindi passiamo all’inserimento dei percorsi dei file; va notato che per quanto si ci possa limitare a inserire l’URL della risorsa da caricare, in questa fase possiamo personalizzare un gran numero di opzioni per ogni elemento.
Il comando per aggiungere un file alla lista degli elementi da caricare è add e l’opzione più semplice prevede l’inserimento del solo indirizzo del file da caricare, che possiamo passare sotto forma di stringa oppure come oggetto URLRequest:
carica.add(“file.txt”);
// oppure
var url_file:URLRequest = new URLRequest(“file.txt”)
carica.add(url_file)
Per ogni file eseguiremo un add, quindi per caricare ad esempio i file “file.txt”,”image.jpg”,”video.flv” e “sound.mp3” il nostro codice sarebbe:
carica.add(“file.txt”);
carica.add(“image.jpg”);
carica.add(“video.flv”)
carica.add(“sound.mp3”)
Normalmente il BulkLoader riconosce il tipo di file da caricare in base all’estensione, tuttavia è possibile utilizzare il parametro type per specificare se il file è un semplice testo, un xml, un’immagine o altro ancora: questo parametro è utile nei casi in cui Flash non può riconoscere il tipo di contenuto dall’estensione, questo potrebbe verificarsi ad esempio se la fonte dei dati fosse un file PHP, che può restituire un testo, un XML o un’immagine, in questo caso è utile comunicare al BulkLoader che tipo di dato vogliamo che venga caricato, in questo modo:
carica.add(“file.php”,{type:”text”})
carica.add(“file2.php”,{type:”xml”})
carica.add(“file3.php”,{type:”image”})
carica.add(“file4.php”,{type:”video”})
Se la classe non riesce a riconoscere il file dall’estensione e non specifichiamo esplicitamente il tipo di dato, come impostazione di default verrà caricato come testo.
Di default la classe riconosce dall’estensione file di tipo swf, jpg, gif, png, mp3, xml, php, txt, py, asp e flv, è comunque possibile specificare delle nuove estensioni grazie al comando registerNewType, per esempio qualora volessimo rendere riconoscibili i file wmv dovremmo usare:
BulkLoader.registerNewType(“wmv”,”WMV-Video”,WMVVideoItem)
I tre parametri sono rispettivamente l’estensione, il tipo di Loader e la classe, infatti per le nuove estensioni dovremmo impostare una classe contenente i comandi adatti per quel tipo di file; è tuttavia piuttosto raro che non siano sufficienti i file già riconoscibili dalla classe BulkLoader dato che coprono pressoché completamente la gamma di file caricabili e utilizzabili nel Flash Player.
Spesso si ha la necessità di non memorizzare in cache alcuni elementi, così che vengano caricati sempre “da zero” quando un utente visita la pagina per essere sicuri che vengano aggiornati subito e non capiti invece che ne venga richiamata una vecchia versione dalla cache; solitamente per evitare che l’elemento venga salvato in memoria si aggiunge all’url del file un parametro casuale, per esempio non si richiama “file.php” ma “file.php?r=”Math.random()*9999. La classe BulkLoader gestisce autonomamente questa operazione, basta sfruttare l’opzione preventCache, in questo modo:
carica.add(“image.jpg”,{preventCache:true})
Come impostazione predefinita, preventCache è impostato a false e quindi prevede la memorizzazione in cache degli elementi.
In qualche caso può capitare che un file non venga caricato correttamente: è una situazione abbastanza rara se il file è presente e non corrotto, tuttavia magari per colpa di un server sovraccarico oppure di una connessione instabile può capitare che una chiamata vada a vuoto: la classe BulkLoader permette di configurare il numero di tentativi per caricare un file, grazie all’opzione maxTries. Per esempio utilizzando la riga di codice:
carica.add(“importante.php”,{maxTries:5})
Faremo sì che vengano effettuati cinque tentativi prima di considerare fallito il caricamento del file; il valore di default per maxTries è 3, pressoché sufficiente per qualsiasi situazione.
Per quanto comunemente sia consigliato attendere il caricamento di tutti gli elementi, e quindi non faccia grossa differenza quale file sia caricato per primo, in alcuni casi (magari se abbiamo molti elementi caricati esternamente) potremmo voler avviare il nostro filmato mentre il loading dei file è ancora in corso. In questo caso vorremo essere sicuri che siano già stati caricati gli elementi che ci servono almeno nelle prime schermate, lasciando poi che gli altri oggetti si carichino mentre il filmato è partito. In questo caso torna molto utile l’opzione priority, che permette appunto di stabilire l’ordine di caricamento dei file. Nel seguente codice verranno caricati prima file4.txt, poi file3.txt e infine file1.txt e file2.txt.
carica.add(“file1.txt”)
carica.add(“file2.txt”)
carica.add(“file3.txt”, {priority:10})
carica.add(“file4.txt”, {priority:20})
Nel caso in cui due elementi abbiano lo stesso valore di priority, assume la precedenza quello inserito prima nella lista di elementi da caricare (infatti tra file1.txt e file2.txt, entrambi con priority uguale a 0, verrà caricato prima file1.txt).
Sempre in un’ottica per cui vogliamo caricare inizialmente solo alcuni elementi, è molto utile la possibilità di assegnare uno o più eventi a un singolo file: in questo modo è possibile ricavare ad esempio il caricamento completo di uno specifico file, senza attendere che siano stati caricati anche tutti gli altri. Per esempio con il seguente codice:
carica.add(“image.jpg”,{onComplete: img_caricata})
Potremo ricavare a parte rispetto a tutto il resto il completo caricamento dell’immagine “image.jpg”. Gli eventi disponibili sono onComplete e onProgress e questo vale anche per l’intero BulkLoader e non solo per i suoi singoli file.
Qualora avessimo la necessità di inviare degli header al file da caricare, possiamo utilizzare l’opzione headers, che richiede come valore un array contenente degli URLRequestHeader. Con il seguente esempio inviamo un header personalizzato al file PHP da caricare:
var headers_array: Array = [new URLRequestHeader(“prova-header”,”testo_di_prova”)]
carica.add(“file.php”,{headers:headers_array})
Normalmente per recuperare i dati di un file caricato all’interno del BulkLoader si può utilizzare il path che abbiamo passato alla classe, come vedremo in seguito, tuttavia può essere molto utile utilizzare un ID, sicuramente più semplice da ricordare specialmente nel caso di file con URL particolarmente lunghi. La sintassi è molto semplice, basta usare l’opzione id:
carica.addListener(“file/con/percorso/complesso/nome_del_file.png”,{id: “immagine”})
In questo modo non dovremo fare riferimento al path per richiamare l’oggetto, ma basterà fare riferimento a immagine
.
Il parametro weight permette di assegnare un “peso” al nostro file. Ha utilità esclusivamente nel processo di caricamento e risulta utile nel caso in cui volessimo creare un preload che informi ad esempio sulla percentuale di caricamento basata sui bytes caricati: purtroppo la proprietà bytesLoaded della classe non è disponibile finché non è stato avviato il caricamento di tutti gli oggetti, quindi ci ritroveremmo con un valore “0” per diverso tempo e solo a caricamento ormai quasi completo riceveremmo un valore utilizzabile; ecco allora che entra in gioco l’opzione weight, grazie a cui possiamo associare un “peso” ai vari file e usare poi la proprietà weightPercent.
Avendo, ad esempio, un file swf da 1.5 MB, un XML da 100 KB e un’immagine da 300 KB, potremmo usare la proprietà weight come di seguito:
carica.add(“file.swf”,{weight:1500})
carica.add(“file.xml”,{weight:100})
carica.add(“image.jpg”,{weight:300})
Ovviamente non è importante che il valore corrisponda esattamente ai kilobyte del file, l’importante è che sia mantenuta la proporzione tra i pesi dei vari elmenti così da avere un responso affidabile dalla proprietà weightPercent, difatti potremmo anche utilizzare il seguente codice (dove il rapporto tra weight è peso è 1 = 100 KB):
carica.add(“file.swf”,{weight:15})
carica.add(“file.xml”,{weight:1})
carica.add(“image.jpg”,{weight:3})
Sono comunque disponibili altri indicatori di progresso per il caricamento e quindi si può evitare questa opzione anche nel caso di caricamenti molto corposi.
Una volta completata la lista di elementi da caricare, è sufficiente utilizzare il comando start per dare il via alle operazioni di caricamento. Ovviamente è consigliabile associare dei listener all’oggetto così da poter controllare il progresso e il completo caricamento della lista di elementi; come abbiamo detto in precedenza i due eventi disponibili per il caricamento sono COMPLETE e PROGRESS, quindi possiamo aggiungere due listener al nostro oggetto in questo modo:
carica.addEventListener(BulkLoader.COMPLETE,caricamento_completo)
carica.addEventListener(BulkLoader.PROGRESS,progresso_caricamento)
Possiamo poi tenere traccia degli eventuali errori usando l’evento ERROR in questo modo:
carica.addEventListener(BulkLoader.ERROR, errore_caricamento)
Avviamo quindi le operazioni con:
carica.start()
Se vuoi aggiornamenti su Caricamenti multipli con ActionScript 3 e BulkLoader inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
Le API Reactive Streams sono alla base dei Reactive Systems. In questo talk, vedremo una overview delle API Reactive Streams, […]
Tutti i linguaggi per diventare uno sviluppatore di app per Android.
Come creare applicazioni per il Web con PHP e MySQL per il DBMS.
Tutte le principali tecnologie per diventare uno sviluppatore mobile per iOS.
I fondamentali per lo sviluppo di applicazioni multi piattaforma con Java.
Diventare degli esperti in tema di sicurezza delle applicazioni Java.
Usare Raspberry Pi e Arduino per avvicinarsi al mondo dei Maker e dell’IoT.
Le principali guide di HTML.it per diventare un esperto dei database NoSQL.
Ecco come i professionisti creano applicazioni per il Cloud con PHP.
Lo sviluppo professionale di applicazioni in PHP alla portata di tutti.
Come sviluppare applicazioni Web dinamiche con PHP e JavaScript.
Fare gli e-commerce developer con Magento, Prestashop e WooCommerce.
Realizzare applicazioni per il Web utilizzando i framework PHP.
Creare applicazioni PHP e gestire l’ambiente di sviluppo come un pro.
Percorso base per avvicinarsi al web design con un occhio al mobile.
Realizzare siti Web e Web application con WordPress a livello professionale.
Come creare database e collection, inserire, estrarre, aggiornare e rimuovere dati da una base di dati MongoDB con Python
Impariamo ad utilizzare Takamaka, una blockchain Java Full Stack, per scrivere codice Java installabile ed eseguibile su una blockchain
In questo articolo vediamo come creare un applicazione in Flash che possa essere adatta per più lingue.
Guida a Red Hat Quarkus, uno stack Java Kubernetes nativo pensato per applicazioni serverless e per la realizzazione di microservizi rapidi ed ottimizzati. Una piattaforma concepita per accedere in ambiente Cloud mettendo a disposizione un framework orientato ai microservizi, come ad esempio Spring Boot o Micronaut