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