Question

applications Flex mobiles sont vue sur la base. Et je suis en utilisant Adobe Cirrus (im en supposant son même pour tout FMS netConnection) Est-ce que quelqu'un sait comment maintenir un netConnection persistant entre les vues dans un flex application mobile?

edit: essayer d'expliquer ce que je dois plus clairement ...

réel simple, ici je connecte cirrus

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

Ensuite, je dois cela à déclencher certaines fonctions en fonction de l'état de la connexion,

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;

                }
            }

Je veux être en mesure de trace(netConnection.nearID) sur ce point de vue, aller à une autre vue et trace(netConnection.nearID) et obtenir le même résultat. et être en mesure d'avoir une fonction de cirrusStatusHandler() comme j'ai ci-dessus pour écouter les événements cirrus. Ensuite, être en mesure de faire netConnection.close() sur une autre vue si je voulais être en mesure de fermer la connexion.

Idées de remue-méninges ce que je pensais que je pouvais faire:

Je pensais que je pourrais peut-être mettre en place la connexion sur le fichier MXML principal ViewNavigatorApplication, mais je l'ai tellement de choses et d'être déclenché en fonction des événements d'état netConnection il semble que ce pourrait être vraiment compliqué à tout manche de ce fichier MXML sur chacune des vues.

Peut-être que je pourrais déclarer la Netcon vars dans le fichier MXML ViewNavigatorApplication et simplement ajouter des écouteurs d'événements à ceux vars chaque vue?

Mais je ne suis pas familier avec l'accès à vars qui existent dans le fichier MXML mainViewNavigatorApplication

J'ai juste besoin d'être en mesure de faire la connexion une fois, puis il reste persistant jusqu'à ce que j'appelle netConnection.close()

Toutes les idées? Est-ce possible? Facile? Vraiment compliqué?

Je suppose que je pourrais utiliser des vues distinctes où j'ai besoin NetConnection et tout simplement avoir ce point de vue particulier l'utilisation « états » dans la vue où les besoins de Netcon être persistant. Il semble être tout simplement ridicule être en utilisant les états puisque c'est une vue application.

EDIT: @ Flextras Réponse:

Mise à jour:

Voici ce que je l'ai appris à compiler sans erreur (jusqu'à ce que je debug puis je reçois un accident mal expliquer)

Voici le fichier principal ViewNavigatorApplication MYAPP.mxml Je mets cela là-dedans:

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;

puis dans mes vues package .. ProfileView.mxml:

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

et même dans ma maison Voir

mais je reçois une erreur nulle lorsque je tente appel

trace(netConnection.nearID) dans la fonction crationComplete sur profileView (qui est après homeview) pour voir si elle a toujours le même netConnection et devrait alors être en mesure d'obtenir le même nearID

Était-ce utile?

La solution 4

C'EST LA RÉPONSE: stackoverflow ne me permet pas de marquer cette réponse pendant 2 jours. Je vais marquer comme tel alors désolé que son être laissée ouverte.

D'accord, je savais que tu pouvais toujours passer un objet de données en poussant des vues, et je l'ai utilisé pour des informations de base et les choses, mais je ne savais pas que vous pouvez faire quelque chose comme ça avec un netConnection, je viens didn « t pense qu'il fonctionnerait comme ça. et je suppose que la performance sage c'est la voie à suivre pour les applications mobiles, car au lieu de forcer quelque chose à exécuter l'im tout le temps de passage sur les points de vue à travers chaque vue sera précédente est détruite.

Voici tout ce qu'il fallait. Heres il vars je l'avais déjà sur mon firstView:

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

Alors je viens de mettre les vars dans un objet, et en poussant une vue comme vous le feriez passer d'autres données en vue:

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

    navigator.pushView(views.ProfileView,goToProfileObject);

puis sur la vue suivante, a obtenu les données de l'objet comme ceci:

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

alors je l'ai fait trace (NetConnection.nearID) sur la nouvelle vue, et ce fut le même que celui de la vue avant, donc ça marche!

Merci de me faire dans la bonne direction pour résoudre ce flexcoders, la solution que vous avez affichée était plus sur la mise en place vars globales, cette solution utilise le navigateur de ablication mobile flex pour passer des objets comme ils en retrait, je suppose.

Autres conseils

On dirait que vous mixez la responsabilité de vue et services.

Jetez un oeil à certains cadres pour vous aider avec une approche MVC - je vous suggère de persil (parce que c'est ce que je sais), mais j'entends que RobotLegs est aussi grande, et possibily plus adapté à une application mobile,

D'une manière générale - vues ne doivent pas avoir une connaissance explicite des services - (. Comme dans un contexte à l'aide de persil ou RobotLegs) ceux-ci sont généralement déclarés ailleurs,

Logic pour votre point de vue s'encapsulées dans un modèle de présentation (pm). Ceci est particulièrement important lors de la construction des applications mobiles, où la même logique est d'appliquer probablement de nombreuses versions différentes de votre point de vue (ie., Android, iOS, tablette, etc.).

Ensuite, vous pouvez utiliser la messagerie (Events) pour envoyer des mises à jour de statut, et utiliser les PM pour la tenue de l'état persistant dans votre application.

Si vous vouliez demander: « Comment puis-je partager le même NetConnection entre plusieurs vues ».

Il suffit de donner à chaque vue une référence au même objet NetConnection. Chaque vue peut avoir son propre, différents auditeurs aux événements envoyés de l'objet NetConnection.

Il ne doit pas être plus compliqué que de créer une propriété dans les classes ProfileView et homeview, comme ceci:

public var netConnectionInstance : NetConnection;

Vous pouvez, littéralement, mettre la même ligne dans les deux classes.

Dans la classe qui contient les deux points de vue, faire quelque chose comme ceci:

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

Je suppose dans ce cas que les deux profileView et homeview sont des enfants de la même classe. Les choses peuvent être un peu plus compliqué si votre ont une structure d'objets d'affichage plus compliqué; mais le concept est le même.

Vous pouvez utiliser un modèle de conception comme Singleton pour maintenir une connexion permanente entre votre point de vue

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top