2016-09-16 141 views
1

我通过ping ping谷歌检查互联网连接状态。问题是,当没有连接并且等待时间超延伸时。超时检查互联网连接Android

这是我的代码:

private boolean checkInternet() { 
    String netAddress = null; 
    try 
    { 
     netAddress = new NetTask().execute("www.google.com").get(); 
     return (!netAddress.equals("")); 
    } 
    catch (Exception e1) 
    { 
     e1.printStackTrace(); 
     return false; 
    } 
    return false; 
} 

public class NetTask extends AsyncTask<String, Integer, String> 
{ 
    @Override 
    protected String doInBackground(String... params) 
    { 
     InetAddress addr = null; 
     try 
     { 
       addr = InetAddress.getByName(params[0]); 
     } 
     catch (UnknownHostException e) 
     { 
      e.printStackTrace(); 
      return ""; 
     } catch (IOException time) 
     { 
      time.printStackTrace(); 
      return ""; 
     } 
     return addr.getHostAddress(); 
    } 
} 

我不能连接isReachable(int timeout)因为它返回一个boolean。我该如何解决这个问题?

回答

0

如果方法没有在指定时间内完成,取消方法有几种方法。

第一个答案to this question可能是我会走的路。在这里它插入你的例子。

ExecutorService executor = Executors.newCachedThreadPool(); 
Callable<Object> task = new Callable<Object>() { 
    public Object call() { 
     String netAddress = new NetTask().execute("www.google.com").get(); 
     return (!netAddress.equals("")); 
    } 
}; 
Future<Object> future = executor.submit(task); 
try{ 
    //Give the task 5 seconds to complete 
    //if not it raises a timeout exception 
    Object result = future.get(5, TimeUnit.SECONDS); 
    //finished in time 
    return result; 
}catch (TimeoutException ex){ 
    //Didn't finish in time 
    return false; 
} 
+0

您的代码完美地添加了相应的例外。有必要建立一个布尔变量结果。非常感谢你 ! – Mike