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);
}
}
}
} 