Frage

Mobile Anwendungen von Flex -Mobilfunkanwendungen sind anzeigen. Und ich verwende Adobe Cirrus (ich gehe davon aus, dass es für jede FMS -NetConnection das gleiche ist) weiß jemand, wie man eine anhaltende NetConnection zwischen Ansichten in einer mobilen Flex -Anwendung beibehält?

Bearbeiten: Um zu versuchen, zu erklären, was ich klarer brauche ...

So wirklich einfach hier bin ich mit Cirrus heran

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

Dann habe ich dies, um bestimmte Funktionen abhängig vom Status der Verbindung auszulösen.

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;

                }
            }

Ich möchte in der Lage sein trace(netConnection.nearID) Gehen Sie nach dieser Ansicht zu einer anderen Ansicht und trace(netConnection.nearID) und das gleiche Ergebnis erhalten. und in der Lage sein, eine zu haben cirrusStatusHandler() Funktion, wie ich oben auf Cirrus -Ereignisse zuhören kann. Dann in der Lage sein zu tun netConnection.close() In einer anderen Ansicht, wenn ich die Verbindung schließen wollte.

Brainstorming -Ideen Was ich dachte, ich könnte tun:

Ich dachte, ich könnte die Verbindung vielleicht in der MXML -Datei von ViewNavigatorApplication einrichten, aber ich habe so viel los und werde basierend auf NetConnection -Statusereignissen ausgelöst, es scheint wirklich kompliziert zu sein, alles von dieser MXML -Datei auf jedem der von der MXML -Datei zu verarbeiten Ansichten.

Vielleicht könnte ich die NetCon -Vars in der MXML -Datei von ViewNavigatorApplication deklarieren und in jeder Ansicht einfach Ereignishörer zu diesen VARs hinzufügen?

Aber ich bin nicht mit dem Zugriff auf Vars vertraut

Ich muss nur in der Lage sein, die Verbindung einmal herzustellen, und dann bleibt sie anhaltend, bis ich anrufe netConnection.close()

Irgendwelche Ideen? Ist das möglich? Einfach? Wirklich kompliziert?

Ich denke, ich könnte separate Ansichten verwenden, bei denen ich die NetConnection nicht brauche und nur diese bestimmte Ansicht "Zustände" in der Ansicht verwenden kann, in der die NetCon hartnäckig sein muss. Es scheint nur dumm zu sein, Zustände zu verwenden, da dies eine aufsichtsbasierte Anwendung ist.

Bearbeiten: @ flextras Antwort:

Aktualisiert:

Hier ist, was ich ohne Fehler kompilieren habe (bis ich debugug habe, bekomme ich einen Crash, der krank werde)

Hier ist die wichtigste ViewNavigatorApplication -Datei myapp.mxml Ich habe dies dort eingelegt:

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;

dann in meinem Ansichten Paket .. ProfileView.mxml:

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

und das gleiche in meiner Heimansicht

Aber ich bekomme einen Nullfehler, wenn ich versuche und anzurufen

trace(netConnection.nearID) In der CrationComplete -Funktion auf ProfileView (die nach HomeView ist), um festzustellen

War es hilfreich?

Lösung 4

Dies ist die Antwort: Stackoverflow erlaubt mir nicht, diese 2 Tage lang eine Antwort zu markieren. Ich werde es als solche markieren, dann tut mir leid, dass es offen bleibt.

Okay, ich wusste immer, dass Sie beim Drücken von Ansichten ein Datenobjekt übergeben können, und ich habe es für grundlegende Informationen und Dinge verwendet, aber ich wusste nicht, dass Sie mit einer NetConnection so etwas tun können. Ich habe einfach nicht gedacht Es würde so funktionieren. Und leistungsfähiger, ich denke, dies ist der Weg für mobile Apps, denn anstatt etwas zu zwingen, die ganze Zeit auszuführen, werde ich es einfach durch die Ansichten weitergeben, wird jede vorherige Ansicht zerstört.

Hier ist alles, was es brauchte. Hier hatte er Vars, den ich bereits in meinem ersten Blick hatte:

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

Dann habe ich diese VARs einfach in ein Objekt eingelegt, und wenn ich eine Ansicht drückte, wie Sie andere Daten in eine Ansicht übergeben würden:

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

    navigator.pushView(views.ProfileView,goToProfileObject);

Dann erhalten Sie bei der nächsten Ansicht die Daten aus dem Objekt wie folgt:

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

Dann habe ich (netconnection.nearid) in der neuen Ansicht verfolgt, und es war dasselbe wie bei der Ansicht zuvor, also funktioniert es!

Vielen Dank, dass Sie mich in die richtige Richtung für die Lösung dieser FlexCoders gebracht haben. Die Lösung, die Sie gepostet haben, bestand mehr über das Einrichten globaler Vars. Diese Lösung verwendet den Flex Mobile Ablication Navigator, um Objekte so zu übergeben, wie sie eingereicht werden, denke ich.

Andere Tipps

Es hört sich so an, als würden Sie die Verantwortung von Sicht und Diensten vermischen.

Schauen Sie sich einige Frameworks an, um Ihnen bei einem MVC -Ansatz zu helfen - ich würde vorschlagen, dass Petersilie (weil es das ist, was ich weiß), aber ich höre, dass Robotlegs auch großartig ist und möglicherweise besser für eine mobile Anwendung geeignet ist.

Im Allgemeinen sollten Ansichten nicht explizites Wissen über Dienste haben - diese werden im Allgemeinen an anderer Stelle deklariert (wie in einem Kontext unter Verwendung von Petersilie oder Robosen).

Die Logik für Ihre Ansichten wird in einem Präsentationsmodell (PM) eingekapselt. Dies ist besonders wichtig beim Erstellen mobiler Apps, bei denen dieselbe Logik wahrscheinlich für viele verschiedene Versionen Ihrer Sichtweise (dh Android, iOS, Tablet usw.) gilt.

Anschließend können Sie Messaging (Ereignisse) zum Senden von Statusaktualisierungen verwenden und PMs für den anhaltenden Zustand in Ihrer Bewerbung verwenden.

Wenn Sie fragen wollten: "Wie kann ich die gleiche NetConnection zwischen mehreren Ansichten teilen?"

Geben Sie einfach jeder Ansicht einen Verweis auf dasselbe NetConnection -Objekt. Jede Ansicht kann ihre eigenen, unterschiedlichen Zuhörer zu den vom NetConnection -Objekt entsandten Ereignissen haben.

Es muss nicht komplizierter sein, als eine Eigenschaft in den ProfileView- und HomeView -Klassen wie folgt zu erstellen:

public var netConnectionInstance : NetConnection;

Sie können in beiden Klassen buchstäblich die gleiche Linie setzen.

Machen Sie in der Klasse, die beide Ansichten enthält, so etwas:

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

Ich gehe davon aus, dass sowohl ProfileView als auch HomeView Kinder derselben Klasse sind. Die Dinge können etwas komplizierter werden, wenn Sie eine kompliziertere Anzeigeobjektstruktur haben. Aber das Konzept ist das gleiche.

Sie können ein Designmuster wie Singleton verwenden, um eine anhaltende Verbindung zwischen Ihren Ansichten aufrechtzuerhalten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top