Comunidad de diseño web y desarrollo en internet online

Como Esperar hasta que los datos esten cagardos.

Citar            
MensajeEscrito el 23 Sep 2011 05:56 pm
Buenas tengo un problema y es el siguiente.
Tengo una claces que lee la base de datos y la carga en un objeto nuevo. El problema que tengo es que cuando yo uso esa claces desde otra clace y quiero leero cualquier metodo GET me da un error, ese error es por que todabia no se cargaron los datos o no llego a leer la base de datos.

aca dejo la clace entera:

Código ActionScript :

package
{
   public class Avisos
   {
      //Importacion de librerias
      import flash.net.NetConnection;
      import flash.net.Responder;
      
      import mx.controls.Alert;
      
      //Variables y Objetos de CONECXION
      private var gateway:String = "http://127.0.0.1/amfphp/gateway.php"; 
      private   var conexion:NetConnection = new NetConnection; 
      private   var responder:Responder = new Responder(exitos, error);; 
      
      //Objeto DATOS
      private var datos:Object;

      //Constructor
      public function Avisos()
      {
         conexion .connect(gateway); 
         conexion.call("miClase.getUsuarios", responder);
         
      }
      
      //Copio datos si conecta. Sino da Error
      private function exitos(datos:Object):void
      {
         this.datos = datos;
      }
      private function error():void
      {
         Alert.show("Error");         
      }
   
/////////////////////////////////////////////////////////////////////////////////////////////////      
      //GET Objeto
      public function getID(index:int):int
      {
         return (this.datos.lengh);         
      }
      
      //GET ID y Status
      /*public function getID(index:int):String
      {
         return (this.datos[index].id);         
      }*/
      public function getStatus(index:int):String
      {
         return (this.datos[index].status);         
      }
      
      //Get CONTENIDO avisos      
      public function getTitulo(index:int):String
      {
         return (this.datos[index].titulo);         
      }
      public function getComentario(index:int):String
      {
         return (this.datos[index].comentario);         
      }
      public function getCategoria(index:int):String
      {
         return (this.datos[index].categoria);         
      }
      public function getContacto(index:int):String
      {
         return (this.datos[index].contacto);         
      }
      public function getImagen(index:int):String
      {
         return (this.datos[index].imagen);         
      }
      
      //GET Fechas y Tiempo
      public function getDuracion(index:int):String
      {
         return (this.datos[index].duracion);         
      }
      public function getFechaPublicacion(index:int):String
      {
         return (this.datos[index].fecha_publicacion);         
      }
      public function getVencimiento(index:int):String
      {
         return (this.datos[index].vencimiento);         
      }
   
   }
}




Cuando de otra claces quiero usar cualquier metodo GET me da error..

Error:


Código :

TypeError: Error #1009: Cannot access a property or method of a null object reference.
   at Avisos/getDuracion()[C:\Users\Joaquin\Adobe Flash Builder 4.5\Mysql\src\Avisos.as:78]
   at MostrarAvisos/Tiempo()[C:\Users\Joaquin\Adobe Flash Builder 4.5\Mysql\src\MostrarAvisos.as:30]
   at MostrarAvisos()[C:\Users\Joaquin\Adobe Flash Builder 4.5\Mysql\src\MostrarAvisos.as:22]
   at Mysql()[C:\Users\Joaquin\Adobe Flash Builder 4.5\Mysql\src\Mysql.mxml:10]
   at _Mysql_mx_managers_SystemManager/create()
   at mx.managers::SystemManager/initializeTopLevelWindow()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:3360]
   at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:3230]
   at mx.managers::SystemManager/docFrameListener()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:3076]



Saludos...

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Sep 2011 06:36 pm
Usualmente se usa eventos, es decir la clase que carga los datos, al terminar de cargar genera un evento al que las clases que le interesa se subscriben. El mismo evento puede propagar los datos o las clases pueden ir a buscar los datos una vez que han reciobido el evento. A la clase que carga datos se la suele llamar modelo, e incluso suele ser un Singleton

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Sep 2011 06:41 pm
¿el MouseEvent es un evento y addEventListener es el que detecta el evento ?

y en este caso cual seria el evento que tengo que usar??

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Sep 2011 06:53 pm
Puedes usar un evento ya existente, por ejemplo Event.COMPLETE o crear uno personalizado. La clase que genera el evento haría

this.dispatchEvent(new Event(Event.COMPLETE))

Si extiende de UIComponent o cualquier clase que tenga dispatchEvent, sino tienes que importar un EventDispatcher y usar una instancia de el. Las clases que escuchan usan addEventListener

modelo.addEventListener(Event.COMPLETE, miMetodo)

Un ejemplo de evento personalizado puede ser este

Código ActionScript :

package event
{
   import flash.events.Event;
   
   public class SaveLoadEvent extends Event
   {
      public static const SAVE:String = "save";
      public static const LOAD:String = "load";
      public static const CANCEL:String = "cancel";
      public var pk:int;
      public var name:String;
      public var category:int;
      public var tags:String; 
      public var desc:String;
      
      public function SaveLoadEvent(type:String, n:String = null, c:int = 0, t:String = null)
      {
         super(type);
         name = n;
         category = c;
         tags = t;
      }
      override public function clone():Event{
         return new SaveLoadEvent(type, name, category, tags);
      }
   }
}


Ese evento lo uso en una aplicación cuando cargo un item particular desde el modelo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Sep 2011 07:36 pm
Gracias por tu ayuda pero no se. Voy atener q leer un largo rato sobre eventos.

Me confunde la funcion CALL por que yo tendria q escuchar ahi el evento despues q llamo a call o algo asi.


Saludos..

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Sep 2011 07:46 pm
Más que una buena idea es como se hacen las cosas en cuanto a aplicaciones, pero lleva su tiempo entenderlo.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Sep 2011 08:35 pm
y tiene alguna web donde diga como hacer las cosas en cuanto aplicacion... Por que no se como bucarlo en Google!!

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Sep 2011 08:44 pm
Hay varios frameworks que contemplan los problemas comunes, aunque en si el desarrollo de RIA abarca problemas comunes en OOP. Acá estoy publicando una serie sobre los frameworks de Flex, con una explicación rápida y un ejemplo concreto: http://flash-db.com/Main/2011/05/15/flex-frameworks/

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Sep 2011 08:47 pm
Esos articulos los publicas tu??

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Sep 2011 10:34 pm
yep

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Sep 2011 12:42 am
y por que no le das mas augue al castellano!! yo creo que esa informaacion tambien hace falta en otro idioma!!! Solo tomalo como una opinion de una persona q solo sabe 10 palabras en ingles!!!

Saludos

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 24 Sep 2011 01:36 pm
Buisiness are buisiness

Jorge

PD: usa Google translate si no entendiste ;)

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Sep 2011 03:59 pm
jajaja.... pero no es lo mismo que redactado por ti!!! vamos che no rechaces el Español...

Saludos

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 05:39 pm
Despues de unos dias largos.. vuelvo con la cabeza un poco mas fria y ya se como encararlo.. tengo un solo problema.

tengo la claces avisos de antes. Como ago para q cuando creo un objeto de esa clace pueda usar el addEventListener para usar el evento COMPLETE. Probe mil formas pero no me sale... Salduos

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 05:45 pm
Perdi el hilo de esto, agregar un listener si el elemento sobre el que lo haces existe es solo usar addEventListener, si no te da error. Pon lo que haces y si da error, cual

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Oct 2011 05:55 pm
Codigo:

Código Flex :

   public class MostrarAvisos
   {
      //Importacion
      import flash.events.TimerEvent;
      import flash.utils.Timer;

      //Variables
      private var index:int;
      private var timer:Timer;
      
      
      //Crea OBJETO
                              private var aviso:Avisos = new Avisos();

      
                             //Constructor
      public function MostrarAvisos()
      {
         aviso.addEventListener(aviso.COMPLETE,Tiempo);
      }
      

                              //Funcion del addEventListener
       public function Tiempo():void
      {
         timer = new Timer (1000,aviso.getDuracion(0));
         timer.start();
                        timer.addEventListener(TimerEvent.TIMER,blah);   
      }
   }


Error:

Código :

Description   Resource   Path   Location   Type
1061: Call to a possibly undefined method addEventListener through a reference with static type Avisos.   MostrarAvisos.as   /Mysql/src   line 23   Flex Problem
Description   Resource   Path   Location   Type
1119: Access of possibly undefined property COMPLETE through a reference with static type Avisos.   MostrarAvisos.as   /Mysql/src   line 23   Flex Problem



En la clace q puse saque metodos que no bienen al caso solo para hacer mas corto el POST y por eso ahi variable que no se utilisan. Saludos

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 06:01 pm
Problemas posibles:

- No veo que importes la clase Avisos
- No crees la instancia cuando declares la variable, hazlo en el constructor antes del addEventListener
- ¿Avisos pude despachar eventos, hereda por ejemplo de UIObject o MovieClip (no me acuerdo si esto es Flash o Flex)
- Mira si Avisos tiene una variable estática COMPLETE, en ese caso deberías decir>
Avisos.COMPLETE (la accedes por la clase, no por la instancia)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Oct 2011 06:49 pm
Corregi lo que tu me dices pero sigue sin aparecerme en la lista de metodos de la clace Avisos el addEventListener.

El problema lo tengo en la Claces AVISO.. Creo la Constantes que tu dices pero presiento que me falta algo mas. Estuve leyendo algo y lo que tendria que crear es un dispatchEvent con el COMPLETE.

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 07:00 pm
Of course, si no generas el evento el listener nunca lo recibirá

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Oct 2011 07:10 pm
Bueno ya se me esta terminando la pasiencia...

en el Constructor de la clace aviso :

Código Flex :

this.dispatchEvent(new Event(Event.COMPLETE));


me da el siguiente error:

Código :

Description   Resource   Path   Location   Type
1061: Call to a possibly undefined method dispatchEvent through a reference with static type Avisos.   Avisos.as   /Mysql/src   line 27   Flex Problem


Avisos tiene que estender de Event??

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 07:16 pm
- ¿Avisos pude despachar eventos, hereda por ejemplo de UIObject o MovieClip (no me acuerdo si esto es Flash o Flex)


La respuesta es no, por eso te da ese error. Tienes dos opciones, o extiendes de MovieClip o UIObject (si es Flex) o instancias un EventDispatcher a través del cual generes tus eventos.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Oct 2011 07:34 pm
Me quedo asi:

Código Flex :

package
{
   import mx.flash.UIMovieClip;
   import flash.events.Event; 
   
   public class Avisos extends UIMovieClip 
   {
      //Importacion de librerias
      import flash.net.NetConnection;
      import flash.net.Responder;
      
      import mx.controls.Alert;
      
      //Variables y Objetos de CONECXION
      private var gateway:String = "http://127.0.0.1/amfphp/gateway.php"; 
      private   var conexion:NetConnection = new NetConnection; 
      private   var responder:Responder = new Responder(exitos, error);; 
      //Objeto DATOS
      private var datos:Object;
      
      //Constante COMPLETE
      public static const COMPLETE:String = "cargar";

      //Constructor
      public function Avisos()
      {
         conexion.connect(gateway); 
         conexion.call("miClase.getUsuarios", responder);
         this.dispatchEvent(new Event(Event.COMPLETE));
      }
}
      


Bueno ahora cuando en la otra clace llamo:

Código Flex :

      public function MostrarAvisos()
      {
         aviso = new Avisos();
         aviso.addEventListener(Avisos.COMPLETE,Tiempo);
      }
      

      public function Tiempo(e:Event):void
      {
         abc = "ANDA";
 }


No se Cambia la variable. Osea no se ejecuta el EVENTO.

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 07:57 pm
Agrega un trace antes del dispatchEvent y otro en Tiempo, mira si ambos se ejecutan, o por lo menos el primero. También pon un trace an el addEventListener, quizás el evento se ejecute antes de que se haya agregado el listener. En Flex el timing es fundamental

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Oct 2011 08:16 pm
Puse los Trace. Primer se ejecuta el Trace que esta antes del dispatchEvent, luego se ejecuta el Trace que esta antes del addEventListener. y el Trace que esta en Tiempo nunca se ejecuta.

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 08:19 pm
Ergo primero se despacha el evento y luego se agrega el listener, cuando debería ser al reves.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Oct 2011 08:33 pm
Modifique el codigo y ahora si primero Escucha el evento y despues lo despacha.

clace Aviso:

Código Flex :

   import mx.flash.UIMovieClip;
   import flash.events.Event; 
   
   public class Avisos extends UIMovieClip 
   {
      //Importacion de librerias
      import flash.net.NetConnection;
      import flash.net.Responder;
      
      import mx.controls.Alert;
      
      //Variables y Objetos de CONECXION
      private var gateway:String = "http://127.0.0.1/amfphp/gateway.php"; 
      private   var conexion:NetConnection = new NetConnection; 
      private   var responder:Responder = new Responder(exitos, error);; 
      //Objeto DATOS
      private var datos:Object;
      
      //Constante COMPLETE
      public static const COMPLETE:String = "cargar";

      //Constructor
      public function Avisos()
      {   
         conexion.connect(gateway); 
         conexion.call("miClase.getUsuarios", responder);
      }
      
      
      //Copio datos si conecta. Sino da Error
      private function exitos(datos:Object):void
      {
         this.datos = datos;
         trace ("B");
         this.dispatchEvent(new Event(Event.COMPLETE));
         trace ("Bb");
      }


Clace Mostar Aviso:

Código Flex :

   import Avisos;
   
   import flash.events.Event;

   public class MostrarAvisos
   {
      //Importacion
      import flash.events.TimerEvent;
      import flash.utils.Timer;

      //Variables
      private var index:int;
      private   var timer:Timer;
      
      //Variables Postisas
      private var abc:String;
      
      private var aviso:Avisos 
      //Constructor
      public function MostrarAvisos()
      {
         
         aviso = new Avisos();
         trace ("A");
         aviso.addEventListener(Avisos.COMPLETE,Tiempo);
         trace ("Aa");
      }
      

      public function Tiempo(e:Event):void
      {
         trace ("C");
      }
      


El trace del metodo Tiempo sigue sin mostramerlo. los otro los muestra en el siguiente orden:
A
Aa
B
Bb

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Oct 2011 08:42 pm
Tip: no pongas A, B, etc, eso no dice nada, por frases del tipo "listener agregado", "evento despachado", etc
Bien, lo siguiente es bastante obvio, est{as escuchando:

aviso.addEventListener(Avisos.COMPLETE,Tiempo);

Y estás despachando

this.dispatchEvent(new Event(Event.COMPLETE));

Avisos.COMPLETE no es Event.COMPLETE

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Oct 2011 03:40 am
Esos errores se comenten cunado sos B*****O...

Bueno por ahora todo anda bien.. Muchas gracias cualquier cosa se a donde recurir jejej Saludos

Por kakinets

41 de clabLevel



 

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.