Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测GWT中的脱机和联机状态_Java_Gwt_Asynchronous - Fatal编程技术网

Java 检测GWT中的脱机和联机状态

Java 检测GWT中的脱机和联机状态,java,gwt,asynchronous,Java,Gwt,Asynchronous,我正在构建一个GWT应用程序,希望检测用户是否有互联网连接。 我的主要问题是在进行异步调用时检测internet。 我们主要使用Chrome浏览器 我试着用这个: public void onFailure(Throwable caught) { if (caught instanceof StatusCodeException && ((StatusCodeException) caught).getStatusCode() == 0) {

我正在构建一个GWT应用程序,希望检测用户是否有互联网连接。 我的主要问题是在进行异步调用时检测internet。 我们主要使用Chrome浏览器

我试着用这个:

public void onFailure(Throwable caught) {

if (caught instanceof StatusCodeException
                && ((StatusCodeException) caught).getStatusCode() == 0) {
            return "NoInternetConnnectivity";   
            }

但我发现,除了互联网连接之外,在许多其他情况下,我们都会收到0作为状态码。

最可靠的方法是依赖HTML5的navigator.onLine方法。您可以添加本机方法:

public static native boolean isOnline() /*-{
        return $wnd.navigator.onLine;
    }-*/;

然后在客户端代码中使用此方法。

此代码取自vaadin TouchKit实现,询问浏览器是否在线的唯一方法是使用html5。请注意,并非所有浏览器都支持此功能,因此如果属性不存在,则必须返回true

 private static native boolean isNavigatorOnline()
 /*-{
    if($wnd.navigator.onLine != undefined) {
        return $wnd.navigator.onLine;
    }
    return true;
 }-*/;
但是,这只在某些情况下起作用,我要说的是,它只对移动设备足够可靠


如果您想确保您的服务器是可访问的,我将在代码中有一个循环来轮询服务器,我还将捕获所有服务器ajax响应,以检查是否存在服务器故障或网络错误。通常,当你得到一个<代码>响应时,GetStaseCu码=0 意味着你不能到达你的服务器(网络下,服务器下,CORS错误等),即IMO是你必须考虑用一个消息来警告用户的,比如“代码>服务器不可达,测试你的连接,……/代码> /P>你不能真正依靠导航器。甚至规范也说这个属性本质上是不可靠的。计算机可以连接到网络而无需访问Internet。见@AdrianB。那你知道还有其他的方法吗?