Domanda

applicazioni Flex mobili sono vista based. E sto utilizzando Adobe Cirrus (im assumendo la sua lo stesso per qualsiasi FMS netConnection) Qualcuno sa come mantenere una netConnection persistente tra le viste in un flex Mobile Application?

modifica: per cercare di spiegare che cosa ho bisogno in modo più chiaro ...

Così reale semplice qui sto collegando al Cirrus

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

Poi ho questo per attivare determinate funzioni a seconda dello stato della connessione,

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;

                }
            }

Voglio essere in grado di trace(netConnection.nearID) su questo punto di vista, passare a un'altra visualizzazione e trace(netConnection.nearID) e ottenere lo stesso risultato. ed essere in grado di avere una funzione cirrusStatusHandler() come se avessi un precedente per intercettare gli eventi del circuito Cirrus. Quindi in grado di fare netConnection.close() su un'altra vista se volevo essere in grado di chiudere la connessione.

Brainstorming Idee quello che stavo pensando che potevo fare:

stavo pensando che potrei forse impostare la connessione sul file ViewNavigatorApplication MXML principale, ma ho così tante cose e di essere innescato in base a eventi di stato netConnection sembra che potrebbe essere davvero complicato per gestire tutto da quel file MXML su ciascuna delle viste.

Forse avrei potuto dichiarare la netcon vars nel file MXML ViewNavigatorApplication, e basta aggiungere listener di eventi a quelli vars su ogni punto di vista?

Ma io non sono a conoscenza l'accesso a Vars che esistono nel file MXML mainViewNavigatorApplication

Ho solo bisogno di essere in grado di effettuare la connessione una volta, e poi rimane persistente fino a quando io chiamo netConnection.close()

Tutte le idee? È possibile? Semplice? Davvero complicato?

Credo che avrei potuto utilizzare viste separate in cui non ho bisogno del netConnection e solo questo punto di vista particolare usa "Stati" all'interno della vista in cui i bisogni netcon essere persistente. E sembra proprio stupido essere utilizzeranno States Da questa è un'applicazione basata su vista.

EDIT: @ Flextras Risposta:

Aggiornamento:

Ecco quello che ho ottenuto per compilare senza errori (fino metto a punto allora ottengo un incidente malato spiego)

Questo è il file principale ViewNavigatorApplication MYAPP.mxml Ho messo questo in là:

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;

poi nel mio punto di vista pacchetto .. ProfileView.mxml:

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

e lo stesso in casa mia Visualizza

ma sto ottenendo un errore di nulla quando cerco di chiamata

trace(netConnection.nearID) nella funzione crationComplete su profiloVedi (che è dopo homeView) per vedere se ha ancora la stessa netConnection e deve quindi essere in grado di ottenere lo stesso nearID

È stato utile?

Soluzione 4

Questa è la risposta: StackOverflow non mi permette di segnare questo una risposta per 2 giorni. Io lo segnaliamo come tale quindi dispiaciuto che il suo essere lasciata aperta.

Bene, ho sempre saputo che si poteva passare un oggetto di dati quando si spinge vista, e ho usato per le informazioni di base e le cose, ma non sapevo che si può fare qualcosa di simile con un netConnection, ho appena didn 't pensare che avrebbe funzionato così. e le prestazioni saggio Credo che questo è il modo di andare per applicazioni mobili perché invece di costringere qualcosa a correre per tutto il tempo im solo di passaggio sulla attraverso il punto di vista sarà ogni visualizzazione precedente viene distrutta.

Ecco tutto ci sono voluti. Heres ha Vars ho già avuto sul mio FirstView:

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

Poi ho appena messo quelli vars in un oggetto, e quando si spinge la vista proprio come si farebbe passare tutti gli altri dati in una vista:

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

    navigator.pushView(views.ProfileView,goToProfileObject);

poi sulla schermata successiva, ha ottenuto i dati dell'oggetto in questo modo:

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

poi ho fatto trace (NetConnection.nearID) sulla nuova vista, ed era lo stesso che per la vista prima, in modo che funziona!

Grazie per avermi nella giusta direzione per risolvere questo flexcoders, La soluzione che ha registrato era più sulla configurazione vars globali, questa soluzione utilizza il flex ablication Navigator Mobile per passare gli oggetti nel modo in cui rientrate credo.

Altri suggerimenti

Sembra che si stia mescolando la responsabilità di vista e servizi.

Date un'occhiata ad alcuni quadri di aiutarvi con un approccio MVC - Io suggerirei di Prezzemolo (perché è quello che so), ma ho sentito che RobotLegs è anche grande, e possibilmente più adatto ad un'applicazione mobile,

In generale - vista non dovrebbero avere conoscenza esplicita dei servizi - (., Come all'interno di un contesto con prezzemolo, o RobotLegs) questi sono generalmente dichiarati altrove,

Logic per i vostri punti di vista vengono incapsulati in un modello di presentazione (PM). Ciò è particolarmente importante quando si costruisce applicazioni mobili, in cui la stessa logica è probabile che si applica a molte versioni differenti della vostra vista (es., Android, iOS, PC, ecc).

Quindi è possibile utilizzare la messaggistica (Eventi) per l'invio di aggiornamenti di stato, e l'uso di PM per lo svolgimento di stato persistente in tutta l'applicazione.

Se si intende chiedere "Come posso condividere la stessa NetConnection tra più vista".

Basta dare ogni vista un riferimento allo stesso oggetto NetConnection. Ogni vista può avere un proprio, diversi ascoltatori agli eventi inviati dall'oggetto NetConnection.

E non deve essere più complicata rispetto alla creazione di una proprietà nelle classi profiloVedi e HomeView, in questo modo:

public var netConnectionInstance : NetConnection;

È possibile, letteralmente, mettere la stessa linea in entrambe le classi.

Nella classe che contiene entrambi i punti di vista, fare qualcosa di simile:

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

Sto assumendo in questo caso che sia profiloVedi e homeView sono figli della stessa classe. Le cose possono ottenere un po 'più complicato, se tu abbia una più complicata struttura di oggetto di visualizzazione; ma il concetto è lo stesso.

È possibile utilizzare un modello di progettazione Singleton come per mantenere una connessione permanente tra il vostro punto di vista

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top