2017-08-23 2 views
1

Quelle est l'approche correcte pour traiter l'indisponibilité de la connexion Internet (ce qui est courant sur les appareils mobiles)? Peut-être que c'est une grande question (ou peut-être pas), mais je n'ai pas trouvé de tutoriel/article/vidéo ou API Codename One pour gérer une connexion Internet instable (c'est la normalité sur mobile) sans erreur ou inattendue comportements. J'ai trouvé une application (Protonmail) qui a une fonctionnalité que je voudrais répliquer dans mes applications. S'il vous plaît regardez les deux captures d'écran suivantes: le premier est pris lorsque la connexion Internet est disponible, le second quand il n'est pas disponible.Codename One - ToastBar lorsque "Aucune connectivité détectée"

enter image description here

enter image description here

J'ai noté que le ToastBar apparaît non seulement lorsque Internet est explicitement désactivé, mais à chaque fois que le serveur n'est pas accessible. Lorsque le message "Aucune connectivité détectée" s'affiche, l'application met l'activité Internet en pause, de sorte qu'aucune erreur n'est générée (et les messages écrits par l'utilisateur ne sont pas perdus). Lorsque le serveur d'applications redevient accessible, le ToastBar disparaît automatiquement (sans appuyer sur le bouton "RETRY").

Quelle est la manière correcte d'implémenter une fonctionnalité similaire dans Codename One, d'une manière aussi indépendante que possible de l'application spécifique? Est-il possible de suspendre l'activité Internet d'une application Codename One puis de la restaurer?

J'imagine quelque chose comme ceci:

  • l'application essaie de faire une simple demande (comme un ping) toutes les quelques secondes à un serveur, mettant en oeuvre la méthode performBackgroundFetch;
  • s'il n'y a pas de réponse dans un temps fixe (c'est-à-dire trois secondes), l'activité Internet est suspendue et le ToastBar est affiché;
  • En cas de réponse, l'activité Internet est restaurée, les téléchargements suspendus ou échoués sont redémarrés et la ToastBar disparaît.
  • Idéalement, tout cela devrait également fonctionner avec un BrowserComponent.

Répondre

1

Vous pouvez détecter une erreur réseau dans la classe NetworkManager en utilisant:

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()); 
}); 

Comme cela est expliqué ici: https://www.codenameone.com/manual/files-storage-networking.html

Le code barre de pain grillé demande juste d'une manière similaire et offre une nouvelle tentative sur la demande de connexion. Notez qu'il s'agit de l'approche globale générique.

Cela ne fonctionnera pas pour des choses comme le composant du navigateur qui se connecte tout seul sans "nous". Là, vous devrez gérer les erreurs du côté JavaScript.

+0

Merci. A propos du côté Javascript, j'ai ouvert une nouvelle question: https://stackoverflow.com/questions/45866963/javascript-show-message-when-no-connectivity-detected –