Pregunta

Las aplicaciones móviles Flex se basan en la vista. Y estoy usando Adobe Cirrus (estoy asumiendo que es lo mismo para cualquier NetConnection de FMS) ¿Alguien sabe cómo mantener una Conconexión de NetS de Persistente entre las vistas en una aplicación móvil Flex?

Editar: para tratar de explicar lo que necesito más claramente ...

Tan realmente simple aquí me estoy conectando con Cirrus

netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS, cirrusStatusHandler);
netConnection.connect(CirrusAddress + "/" + DeveloperKey);

Luego tengo esto para activar ciertas funciones dependiendo del estado de la conexión,

protected function cirrusStatusHandler(event:NetStatusEvent):void

                switch (event.info.code)
                {
                    case "NetConnection.Connect.Closed" :
                        trace(event.info.code);
                        break;

                    case "NetConnection.Connect.Rejected" :
                        trace(event.info.code);
                        break;

                    case "NetConnection.Connect.Failed" :
                        trace(event.info.code);
                        break;

                    case "NetConnection.Connect.Success" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Connect.Success" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Posting.Notify" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Neighbor.Connect" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Neighbor.Disconnect" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.SendTo.Notify" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Connect.Success" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Publish.Start" :
                        trace(event.info.code);

                        break;

                    case "NetStream.Play.Start" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Play.Failed" :
                        trace(event.info.code);
                        break;


                    case "NetStream.Play.Stop" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Connect.Closed" :
                        trace(event.info.code);
                        break;  

                    case "NetStream.Play.UnpublishNotify" :
                        trace(event.info.code);
                        break;  

                    case "NetStream.Unpublish.Success" :
                        trace(event.info.code);
                        break;

                }
            }

Quiero poder poder trace(netConnection.nearID) Desde esta vista, vaya a otra vista y trace(netConnection.nearID) y obtener el mismo resultado. y poder tener un cirrusStatusHandler() Funciona como si tuviera un anterior para escuchar los eventos Cirrus. Entonces poder hacer netConnection.close() En otra vista, si quería poder cerrar la conexión.

Ideas de lluvia de ideas lo que estaba pensando que podía hacer:

Estaba pensando que tal vez podría configurar la conexión en el archivo MXML de Aplication de ViewNavigator principal, pero tengo muchas actividades y estoy activada en función de los eventos de estado de NetConnection, parece que podría ser realmente complicado manejar todo, desde ese archivo MXML en cada uno de los de cada uno de los puntos de vista.

¿Tal vez podría declarar los VAR NetCon en el archivo MXML de ViewNavigatorApplication y simplemente agregar oyentes de eventos a esos VAR en cada vista?

Pero no estoy familiarizado con el acceso a VAR que existen en el archivo MXML de MainViewNavigatorApplication

Solo necesito poder hacer la conexión una vez, y luego permanece persistente hasta que llamo netConnection.close()

¿Algunas ideas? es posible? ¿Simple? ¿Realmente complicado?

Supongo que podría usar vistas separadas en las que no necesito la NetConnection y solo tener esta vista en particular, use "estados" dentro de la vista donde el NETCON debe ser persistente. Parece que se puede usar los estados, ya que esta es una aplicación basada en la vista.

Editar: @ Flexstras Respuesta:

Actualizado:

Esto es lo que he podido compilar sin ningún error (hasta que depuré, luego me explicaré) lo explicará)

Aquí está el archivo principal de ViewNavigatorApplication myapp.mxml, puse esto allí:

public static var netConnection:NetConnection;
public static var groupspec:GroupSpecifier; 
public static var netGroup:NetGroup;

views.HomeView.netConnection = netConnection;
views.ProfileView.netConnection = netConnection;
views.HomeView.groupspec = groupspec;
views.ProfileView.groupspec = groupspec;
views.HomeView.netGroup = netGroup;
views.ProfileView.netGroup = netGroup;

luego en mi paquete de vistas .. perfilview.mxml:

public static var netConnection:NetConnection;
public static var groupspec:GroupSpecifier;
public static var netGroup:NetGroup;

y lo mismo en mi vista a casa

Pero recibo un error nulo cuando intento llamar

trace(netConnection.nearID) en la función crationComplete en perfilView (que es después de homeview) para ver si todavía tiene la misma netconnection y luego debería poder obtener lo mismo cercanoid

¿Fue útil?

Solución 4

Esta es la respuesta: StackOverflow no me permitirá marcar esta respuesta durante 2 días. Lo marcaré como tal y lamento que se quede abierto.

Muy bien, siempre supe que podías pasar un objeto de datos al presionar las vistas, y lo he estado usando para obtener información básica y cosas, pero no sabía que puedes hacer algo como esto con una Conconnección, simplemente no pensé Funcionaría así. Y en cuanto al rendimiento, supongo que este es el camino a seguir para aplicaciones móviles porque en lugar de obligar a algo a ejecutar todo el tiempo, solo lo estoy pasando a través de las vistas que se está destruyendo cada vista anterior.

Aquí está todo lo que tomó. Aquí está Vars que ya tenía en mi primerView:

public var netConnection:NetConnection;
public var groupspec:GroupSpecifier;
public var netGroup:NetGroup;

Luego solo pongo esos vars en un objeto, y al presionar una vista al igual que pasaría cualquier otro datos a una vista:

    var goToNextView:Object=new Object();
    goToNextView.netConnection = netConnection;
    goToNextView.groupspec = groupspec;
    goToNextView.netGroup = netGroup;

    navigator.pushView(views.ProfileView,goToProfileObject);

Luego, en la siguiente vista, obtuve los datos del objeto como este:

netConnection = data.netConnection;
groupspec= data.groupspec;
netGroup = data.netGroup;

Luego hice Trace (NetConnection.NearId) en la nueva vista, y era lo mismo que en la vista anterior, ¡así que funciona!

Gracias por conseguirme en la dirección correcta para resolver estos códigos flexibles, la solución que publicó fue más sobre la configuración de Vars globales, esta solución es usar el navegador de ablicación móvil Flex para pasar objetos de la forma en que sangraron, supongo.

Otros consejos

Parece que estás mezclando la responsabilidad de View & Services.

Eche un vistazo a algunos marcos para ayudarlo con un enfoque de MVC: sugeriría perejil (porque es lo que sé), pero escucho que Robotlegs también es excelente y posee más adecuado para una aplicación móvil,

En términos generales, las opiniones no deberían tener un conocimiento explícito de los servicios: generalmente se declaran en otros lugares (como dentro de un contexto que usa perejil o robotlegs).

La lógica para sus puntos de vista se encapsula en un modelo de presentación (PM). Esto es particularmente importante cuando se crea aplicaciones móviles, donde es probable que la misma lógica se aplique a muchas versiones diferentes de su vista (es decir, Android, iOS, tableta, etc.).

Luego puede usar mensajes (eventos) para enviar actualizaciones de estado y usar PM para mantener el estado persistente en su aplicación.

Si quiso preguntar "¿Cómo puedo compartir la misma netconnection entre múltiples vistas".

Simplemente dé a cada vista una referencia al mismo objeto NetConnection. Cada vista puede tener sus propios oyentes diferentes a los eventos enviados desde el objeto NetConnection.

No tiene que ser más complicado que crear una propiedad en las clases de perfilview y homeview, como esta:

public var netConnectionInstance : NetConnection;

Puede, literalmente, poner la misma línea en ambas clases.

En la clase que contiene ambas opiniones, haz algo como esto:

var netConnectionInstance = new NetConnection()
profileView.netConnectionInstance  = netConnectionInstance;
homeView.netConnectionInstance  = netConnectionInstance;

Supongo en este caso que tanto perfilview como homeview son niños de la misma clase. Las cosas pueden volverse un poco más complicadas si tiene una estructura de objeto de pantalla más complicada; Pero el concepto es el mismo.

Puede usar un patrón de diseño como Singleton para mantener una conexión persistente entre sus puntos de vista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top