【问题标题】:How to remove the "Failed Connecting to service" alert?如何删除“连接服务失败”警报?
【发布时间】:2015-04-06 20:28:10
【问题描述】:

我的 IBM Mobilefirst 应用程序在启动时连接到服务器。当我尝试在离线模式下打开应用程序时,它会显示一个警报,其中包含 “应用程序无法连接到服务”,并带有 3 个按钮:“重新加载”、“关闭”和“详细信息”。

如何在应用离线时禁用此警报?我试过不打电话给WL.Client.connect,但没有用。处理这个问题的正确方法是什么?

从离线模式登录:

04-06 15:54:21.578: E/NONE(16221): [/apps/services/api/app1_worklight/android/logout] Host is not responsive. Try to manually access the URL through the android emulator browser to verify connectivity.

04-06 15:54:21.588: E/NONE(16221): Client init failed. The service is currently not available.

【问题讨论】:

  • 你能提供日志吗?尝试在 initoptions.js 中实现 onConnectionFailure 方法来捕获 MF API 失败。阅读以下问题Server Connecting Issue

标签: android ibm-mobilefirst


【解决方案1】:

如果您没有拨打WL.Client.connect,则不可能在设备连接到 Internet 并启动应用程序时仍然会收到此信息。听起来您实际上并没有生成不包含 connect 方法的新应用程序。

我通过使用 initOptions.js 中的 connectOnStartup 属性并关闭开发服务器来重现上述对话框。 请注意,从 Worklight 6.2 开始不推荐使用此属性

至于实际问题 - 在连接尝试失败的情况下不显示默认失败对话框,我认为您有两个选项:

  1. 不要在 initOptions.js 中使用connectOnStartup。相反,common\js\your-main.js 使用:

    function wlCommonInit() {
        WL.Client.connect ({onSuccess: successCallback, onFailure: failureCallback});
    }
    
    function successCallback() {
        ...
    }
    
    function failureCallback() {
        ...
    }
    

如果连接尝试失败,将调用failureCallback 函数。

  1. 如果您正在使用connectOnStartup,那么在 common\js\initOptions.js 中添加 onFailure 选项。这将覆盖默认行为。实现将是这样的:

    var wlInitOptions = {
        connectOnStartup:true,
        onFailure: function() {
            WL.App.hideSplashScreen();
            wlCommonInit();
        },
        ...
    }
    

但必须注意,您正在更改应用程序流程并通过覆盖您现在完全负责的默认流程,或者必须确保在您的应用程序中不会发生任何意外情况。

另外,为什么要删除此对话框?有一个关闭按钮...

【讨论】:

    【解决方案2】:

    从日志中,似乎正在调用从 MobileFirst 服务器注销。检查您的应用程序代码以确保您没有对 MobileFirst 服务器进行任何调用,而不仅仅是连接。

    【讨论】:

      【解决方案3】:

      根据日志,注销请求已发送到服务器。

      由于设备处于离线模式,请求失败。

      我相信下面的实现会对你有所帮助,

      function wlCommonInit() {
          WL.Client.connect ({onSuccess: successCallback, onFailure: failureCallback});
      }
      
      function successCallback() {
         if( WL.Client.isUserAuthenticated("RealmName")){
            WL.Client.Logout("RealmName",{
                  onSuccess:function(){},
                  onFailure:function(){}
               }
            );
         }
      }
      
      function failureCallback() {
              ...
      }
      

      function wlCommonInit() {
         WL.Device.getNetworkInfo(
            function (networkInfo) {
               if (networkInfo.isNetworkConnected == "true") {
                   if( WL.Client.isUserAuthenticated("RealmName")){
                      WL.Client.Logout("RealmName",{
                         onSuccess:function(){},
                         onFailure:function(){}
                      });
                   }
               } 
            }
         );
      }
      

      这是一个示例 sn-p,你可以自定义你想要的方式。

      link[IBM MobileFirst Platform 7.0] 将帮助您了解如何处理如此复杂的机制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 2010-10-10
        相关资源
        最近更新 更多