Codename One - ToastBar,当"没有检测到连接时"

时间:2017-08-23 15:57:37

标签: android ios codenameone

处理互联网连接不可用的正确方法是什么(在移动设备上常见)?

也许这是一个很大的问题(或者可能不是),但我没有找到任何Codename One教程/文章/视频或API来处理不稳定的互联网连接(这是移动设备上的常态)没有错误或意外行为。 我发现了一个应用程序(Protonmail),它具有我想在我的应用程序中复制的功能。请查看以下两个屏幕截图:第一个是在互联网连接可用时拍摄的,第二个是在它不可用时拍摄的。

enter image description here

enter image description here

我注意到ToastBar不仅在显式禁用Internet时出现,而且每次都无法访问服务器时出现。当"没有检测到连接时"如果显示消息,应用程序将暂停Internet活动,因此不会生成任何错误(并且用户写入的消息不会丢失)。当应用服务器返回可访问时,ToastBar会自动消失(无需按下" RETRY"按钮)。

在Codename One中以尽可能独立于特定应用程序的方式实现类似功能的正确方法是什么?是否可以暂停Codename One应用程序的Internet活动然后恢复它?

我想象这样的事情:

  • 应用程序尝试每隔几秒向服务器执行一次简单的请求(如ping),实现performBackgroundFetch方法;
  • 如果在固定时间内没有响应(即三秒),则暂停互联网活动并显示ToastBar;
  • 如果有响应,则恢复Internet活动,重新启动暂停或失败的下载并且ToastBar消失;
  • 理想情况下,所有这些都应该适用于BrowserComponent。

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法检测NetworkManager课程中的网络错误:

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

如此处所述:https://www.codenameone.com/manual/files-storage-networking.html

吐司条形码只是以类似的方式提示,并提供连接请求的重试。请注意,这是通用的全局方法。

这对于浏览器组件这样的东西不起作用,浏览器组件在没有“我们”的情况下自行连接。在那里你需要处理JavaScript方面的错误。