Tengo la siguiente clase de acceso a base de datos, que entre otras cosas, accede para obtener el nombre del archivo de estilos que va a utilizar en un TextField y para obtener de un archivo XML el texto a mostrar con dichos estilos.
Cuando cargo el xml le asigno un listener Event.COMPLETE y hago lo mismo cuando cargo los estilos.
Quiero que una vez se hayan cargado tanto el xml como los estilos, entonces y solo entonces en la función getFicha, guardar los valores en el array para poder devolverlos.
Tal cual está ahora, las variables sheet y xml me vuelven como null
¿Cómo puedo solucionar esto?
Gracias! Un saludo
Código ActionScript :
public class FichaDAL { private static var ficheroBD : String = Constantes.NOMBRE_BD; private static var dbFile : File = File.applicationStorageDirectory.resolvePath(ficheroBD); private static var alerta : Alerta = Alerta.getAlerta(); private static var loader : URLLoader; private static var sheet : StyleSheet; private static var xml : XML; public static function getFicha(idFicha : String) : Array { // Obtener los datos de ficha de la tabla var stmt : SQLStatement = new SQLStatement(); var conn : SQLConnection = new SQLConnection(); var sqlString : String; var result : SQLResult; var numLineas : uint; conn.open(dbFile, SQLMode.READ); stmt.sqlConnection = conn; sqlString = "SELECT fichaId, nombreFicha, estilos, texto " + "FROM ficha " + "WHERE fichaId = :identificador"; stmt.text = sqlString; stmt.parameters[":identificador"] = idFicha; try { // Ejecutar statement stmt.execute(); // Acceder a los datos devueltos result = stmt.getResult(); numLineas = result.data.length; obtenerEstilos(result.data[0].estilos); getXML(result.data[0].texto); // AQUÍ quiero que no se cree el array hasta que no hayan terminado los listeners de las // funciones obtenerEstilos y getXML var ficha : Array = new Array (result.data[0].fichaId, result.data[0].nombreFicha, sheet, xml); }catch (error : SQLError) { throw new ErrorPIVI(error.name + error.message + error.details); } return ficha; } public static function instalarFichas() : void { var conn : SQLConnection = new SQLConnection(); var sqlString : String; var fichaId : String = "37"; var nombreFicha : String = "Texto"; var estilos : String = "estilos.css"; var texto : String = "archivo.xml"; var insertaStmt : SQLStatement = new SQLStatement(); try { conn.open(dbFile, SQLMode.UPDATE); sqlString = "INSERT INTO ficha(fichaId, nombreFicha, estilos, texto) " + "VALUES (:fichaId, :nombreFicha, :estilos, :texto)"; insertaStmt.sqlConnection = conn; insertaStmt.text = sqlString; insertaStmt.parameters[":fichaId"] = fichaId; insertaStmt.parameters[":nombreFicha"] = nombreFicha; insertaStmt.parameters[":estilos"] = estilos; insertaStmt.parameters[":texto"] = texto; insertaStmt.execute(); }catch (error:SQLError) { throw new ErrorPIVI(error.name + error.message + error.details); } } private static function obtenerEstilos(estilos : String) : void { var req : URLRequest = new URLRequest(estilos); loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, estilosCargados); loader.load(req); } private static function estilosCargados(event : Event) : void { loader.removeEventListener(Event.COMPLETE, estilosCargados); sheet = new StyleSheet(); sheet.parseCSS(loader.data); } private static function getXML(miArchivo : String) : void { var loader : URLLoader = new URLLoader(); var req : URLRequest = new URLRequest(miArchivo); loader.load(req); loader.addEventListener(Event.COMPLETE, xmlCargado); } private static function xmlCargado (event : Event) : void { var loader : URLLoader = event.target as URLLoader; if (loader != null) { xml = new XML(loader.data); } } } }