Codename One – ToastBar“未检测到连接”

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

也许这是一个很大的问题(或者不是),但是我没有find任何Codename One教程/文章/video或API来处理不稳定的Internet连接(这是移动设备的正常状态),没有错误或意外的行为。 我find了一个应用程序(Protonmail),它具有我想在应用程序中复制的function。 请看以下两个屏幕截图:第一个是Internet连接可用时,第二个是不可用时。

在这里输入图像说明

在这里输入图像说明

我注意到ToastBar不仅在Internet显式禁用时出现,而且每当服务器不可访问时。 当显示“未检测到连通性”消息时,应用程序暂停Internet活动,因此不会生成错误(并且用户写入的消息不会丢失)。 当应用程序服务器返回到可达状态时,ToastBar自动消失(不按“RETRY”button)。

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

我在想像这样的事情:

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

您可以使用以下方法检测NetworkManager类中的networking错误:

 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方面的错误。