如何删除“失败的连接服务”警报?

时间:2015-04-06 09:35:34

标签: android ibm-mobilefirst

我的IBM Mobilefirst应用程序在启动时连接到服务器。当我尝试在离线模式下打开应用时,它会显示一条警告"应用程序无法通过3个按钮连接到服务" :"重新加载",& #34;靠近"和"细节"。

如何在应用离线时停用此提醒?我试过不打电话给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.

3 个答案:

答案 0 :(得分:1)

如果您没有打电话给WL.Client.connect,则无法,当设备连接到互联网并启动应用程序时,您仍然会收到此消息。听起来你并没有真正生成一个不包含connect方法的新应用。

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

至于实际问题 - 如果连接尝试失败,则不显示默认的失败对话框,我有两个选项:

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

    function wlCommonInit() {
        WL.Client.connect ({onSuccess: successCallback, onFailure: failureCallback});
    }
    
    function successCallback() {
        ...
    }
    
    function failureCallback() {
        ...
    }
    
  2. 如果连接尝试失败,将调用failureCallback函数。

    1. 如果 使用connectOnStartup,那么在共同的\ js \ _ initOptions.js中添加onFailure选项。这将覆盖默认行为。实施将如下:

      var wlInitOptions = {
          connectOnStartup:true,
          onFailure: function() {
              WL.App.hideSplashScreen();
              wlCommonInit();
          },
          ...
      }
      
    2. 但必须注意,您正在改变应用程序流程,并且通过覆盖默认流程,您现在完全掌控它,并且必须确保在您的应用程序中没有发生任何意外情况。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

由于设备处于脱机模式,因此请求失败。

我相信以下实施将对您有所帮助,

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

它是一个示例代码段,您可以自定义您想要的方式。

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