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

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

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

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

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

我在想象这样的事情:

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

【问题讨论】:

    标签: android ios codenameone


    【解决方案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 端的错误。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2021-05-08
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多