【发布时间】:2016-12-30 07:53:20
【问题描述】:
String url = "http://xyzcloud.com/xyz/xyz.php";
这是试图从云端获取数据的 url,如果已连接互联网,则将执行异步任务 我写了这个方法来检查互联网是否连接,在我的移动 wifi 中,当我尝试执行它时它是连接的,它给出了异常
public boolean checkOnlineState()
{
boolean val = false;
ConnectivityManager CManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo NInfo = CManager.getActiveNetworkInfo();
if (NInfo != null && NInfo.isConnectedOrConnecting()) {
try {
if (InetAddress.getByName(url).isReachable(10000))
{
// host reachable
val=true;
Log.e("checkOnlineState", "" + val);
}
else
{
// host not reachable
val = false;
Log.e("checkOnlineState", "" + val);
}
} catch (IOException e) {
e.printStackTrace();
}
}
return val;
}
【问题讨论】:
-
这是出现致命异常的异常:主进程:com.xyz.xyz,PID:13405 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1288 ) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:432) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:253) 在 java.net.InetAddress.getByName(InetAddress.java:306)
-
在 catch 块中处理套接字超时和连接超时
-
添加两个异常后返回false
-
如何设置 val = false;抓块?