2011-02-23 21 views
6

Ho iniziato a convertire questa applicazione flessibile per l'esecuzione su Android utilizzando il nuovo sdk Flex Hero. Ho già sostituito tutti i componenti mobili incompatibili e l'ho fatto funzionare alcune volte con successo.Bitmap casuale non valida

Quando uso le stesse librerie che eseguono l'applicazione web originale funziona perfettamente.

Il grosso problema tuttavia sono questi errori casuali di BitMapdata non validi all'avvio dell'applicazione mobile. Ecco l'intero output.

ArgumentError: Error #2015: Invalid BitmapData. 
at flash.display::BitmapData/ctor() 
at flash.display::BitmapData() 
at spark.primitives::BitmapImage/http://www.adobe.com/2006/flex/mx/internal::applySource()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\BitmapImage.as:1337] 
at spark.primitives::BitmapImage/http://www.adobe.com/2006/flex/mx/internal::validateSource()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\BitmapImage.as:1652] 
at spark.primitives::BitmapImage/commitProperties()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\BitmapImage.as:902] 
at spark.primitives.supportClasses::GraphicElement/validateProperties()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\primitives\supportClasses\GraphicElement.as:3487] 
at spark.components::Group/commitProperties()[E:\dev\hero_private_beta\frameworks\projects\spark\src\spark\components\Group.as:931] 
at mx.core::UIComponent/validateProperties()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\core\UIComponent.as:8095] 
at mx.managers::LayoutManager/validateProperties()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\managers\LayoutManager.as:597] 
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\managers\LayoutManager.as:760] 
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\hero_private_beta\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1157] 

ho debug molte volte e ho trovato che quando raggiunge questo metodo

mx_internal function applySource():void 
{ 

in BitmapImage.as, a questa dichiarazione

if (!bitmapData && tmpSprite) 

il bitmapData == null. Tuttavia, quando eseguo l'applicazione web originale, bitmapData non è nullo. Il valore bitmapData deve essere determinato in questa riga di codice

<s:BitmapImage id="smallTriangle" smooth="true" source="@Embed('/com/xploreplus/components/containers/panel/assets/images/smallTriangle.png')" /> 

Ora mi sembra che, wile esegue l'applicazione mobile, è in grado di trovare l'immagine, come quando si esegue il WebApplication, utilizzando lo stesso libreria dove è la linea di codice sopra, è in grado di trovare l'immagine.

Questo problema mi ha perseguitato da giorni e sto davvero iniziando a pensare che questo sia un bug, soprattutto perché a volte FUNZIONA. O c'è qualcosa che mi manca qui.

+0

Sono state apportate alcune correzioni di bug da quando la versione dell'anteprima di Hero è stata creata da MAX che potrebbe aver risolto il problema. Hai provato l'ultima build di Hero? Puoi ottenere l'ultima build iscrivendoti al programma di prerelease: http://iamdeepa.com/blog/?p=85 –

+0

Ciao steven. Attualmente sto usando la build MAX Preview (4.5.0.17689) che può essere trovata nella pagina di download di adobe per hero SDK perché le versioni successive non supportano le funzionalità mobili. Mi sono iscritto al programma di prerelease alcuni giorni fa. Essere coinvolti in questo programma significa che otterrò le ultime build incluse le funzionalità mobili? Inoltre ho temporaneamente "corretto" l'errore bitmapdata non valido rimuovendo i miei skinclasses ovunque, sembra che l'errore sia stato generato da un altro problema. Non ho avuto il tempo di approfondire ciò. Quindi il programma funziona ora, ma senza mostrare img – vegasaurus

+1

Probabile che sia il tuo problema, ma ho visto errore BitmapData non valido sporadicamente quando: 1) Una bitmap è troppo grande. 2) Quando la mia applicazione esaurisce la memoria (l'allocazione di un BitmapData tende a spingerlo oltre il limite) 3) E quando si tenta di aggiornare un dato bitmap con una dimensione non valida. Non uso molto Flex, ma puoi includere il codice in cui assegni la variabile bitmapData da BitmapImage con id "smallTriangle?" – DoomGoober

risposta

2

Sono quasi certo che si tratta di un problema di memoria. Il fatto che l'errore sia nel costruttore BitmapData indica che l'app sta provando a creare un BitmapData con dimensioni non valide (non probabile poiché funziona nell'altra build e l'immagine viene recuperata in fase di compilazione) o lo scenario più probabile che Flash ha esaurito la memoria e non può creare BitmapData (i dispositivi mobili di solito hanno una memoria molto inferiore a un PC).

+0

Questo potrebbe essere un lavoro per un blocco try/catch: potresti essere in grado di ottenere una migliore comprensione di ciò che accade se riesci a rilevare l'errore durante il runtime. –