代号一 - “未检测到连接”时的 ToastBar

Posted

技术标签:

【中文标题】代号一 - “未检测到连接”时的 ToastBar【英文标题】:Codename One - ToastBar when "No connectivity detected" 【发布时间】:2017-08-23 15:57:36 【问题描述】:

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

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

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

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

我在想象这样的事情:

应用尝试每隔几秒向服务器发出一个简单的请求(如 ping),实现 performBackgroundFetch 方法; 如果在固定时间(即三秒)没有响应,则暂停上网活动并显示ToastBar; 如果有响应,则恢复 Internet 活动,重新启动暂停或失败的下载,ToastBar 消失; 理想情况下,所有这些都应该与 BrowserComponent 一起使用。

【问题讨论】:

【参考方案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

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

这不适用于浏览器组件这样的东西,它在没有“我们”的情况下自行连接。在那里你需要处理 javascript 端的错误。

【讨论】:

谢谢。关于 Javascript 方面,我开了一个新问题:***.com/questions/45866963/…

以上是关于代号一 - “未检测到连接”时的 ToastBar的主要内容,如果未能解决你的问题,请参考以下文章

Flutter-未检测到连接的设备

Flutter 插件:Android Studio 未检测到连接的设备

Socket.io (Node.js) 未检测到连接的 QTcpSocket

ajax三级联动下拉菜单

代号一构建IOS:致命错误:找不到'MapContainer.h'

代号一 IOS CaptureAudio