2017-08-23 1 views
1

Was ist ein korrekter Ansatz für die Nichtverfügbarkeit von Internetverbindungen (auf Mobilgeräten üblich)?Codename One - ToastBar bei "Keine Verbindung gefunden"

Vielleicht ist es eine große Frage (oder auch nicht), aber ich habe kein Codenamen One Tutorial/article/Video oder API mit einer instabilen Internetverbindung zu behandeln finden (das ist die Normalität auf mobiles) ohne Fehler oder unerwarteten Verhaltensweisen. Ich habe eine App (Protonmail) gefunden, die eine Funktionalität besitzt, die ich in meinen Apps replizieren möchte. Bitte schauen Sie sich die folgenden zwei Screenshots an: Der erste Screenshot wird erstellt, wenn die Internetverbindung verfügbar ist, der zweite, wenn dieser nicht verfügbar ist.

enter image description here

enter image description here

Ich stellte fest, dass die ToastBar nicht nur angezeigt, wenn Internet explizit deaktiviert ist, aber jedes Mal, dass der Server nicht erreichbar ist. Wenn die Meldung "Keine Verbindung erkannt" angezeigt wird, pausiert die App die Internetaktivität, sodass keine Fehler generiert werden (und die vom Benutzer geschriebenen Nachrichten nicht verloren gehen). Wenn der App-Server wieder erreichbar ist, verschwindet die ToastBar automatisch (ohne die Schaltfläche "RETRY" zu drücken).

Was ist ein korrekter Weg, um eine ähnliche Funktionalität in Codename One zu implementieren, so weit wie möglich unabhängig von der spezifischen App? Ist es möglich, die Internet-Aktivität einer Codename One-App auszusetzen und sie dann wiederherzustellen?

Ich stelle mir vor, so etwas wie dieses:

  • die App versucht, eine einfache Anfrage zu tun (wie ein Ping) an einen Server alle paar Sekunden, die performBackgroundFetch Verfahren implementiert;
  • Wenn innerhalb einer festgelegten Zeit (d. H. Drei Sekunden) keine Antwort erfolgt, wird die Internetaktivität ausgesetzt und die ToastBar wird angezeigt.
  • Wenn eine Antwort vorliegt, wird die Internetaktivität wiederhergestellt, die angehaltenen oder fehlgeschlagenen Downloads werden neu gestartet und die ToastBar wird ausgeblendet.
  • Idealerweise sollte das alles auch mit einer BrowserComponent funktionieren.

Antwort

1

Sie können einen Netzwerkfehler in der NetworkManager Klasse erkennen, indem mit:

NetworkManager.getInstance().addErrorListener(e -> { 
    // prevents the error from propagating into the ConnectionRequest class 
    e.consume(); 

    ToastBar.showMessage("Connectivity error, retry?", FontImage.MATERIAL_ERROR, 
     ee -> ee.getConnectionRequest().retry()); 
}); 

Wie hier erklärt: https://www.codenameone.com/manual/files-storage-networking.html

Der Toast Strichcode aufgefordert, nur auf eine ähnliche Art und Weise und bietet einen erneuten Versuch auf die Verbindungsanfrage Beachten Sie, dass dies der allgemeine globale Ansatz ist.

Dies funktioniert nicht für Dinge wie Browser-Komponente, die sich ohne "uns" verbindet. Dort müssen Sie Fehler auf der JavaScript-Seite behandeln.

+0

Danke. Über die Javascript-Seite habe ich eine neue Frage geöffnet: https://stackoverflow.com/questions/45866963/javascript-show-message-when-no-connectivity-detected –