[英]How to know the reachable of any url address?
我編寫了以下方法來了解url的可達性。
public boolean isMyURLReachable(String url){
boolean reachable = false;
try {
reachable = InetAddress.getByName(url).isReachable(2000);
} catch (UnknownHostException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return reachable;
}
我這樣稱呼它。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
boolean reachable = isMyURLReachable("www.google.com");
if(reachable)
Toast.makeText(getApplicationContext(), "Reachable", 500).show();
else
Toast.makeText(getApplicationContext(), "Unreachable", 500).show();
}
});
但是發生android.os.NetworkMainThreadException,我是否需要在androidmanifest.xml文件中放入任何內容,或者我的想法有誤?
當應用程序嘗試在其主線程上執行聯網操作時,將引發NetworkMainThreadException
。
請嘗試在AysncTask
或其他線程中執行該操作。
參考:
http://developer.android.com/reference/android/os/AsyncTask.html
http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
我寫了以下內部類。
class URLCheckTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... url) {
boolean reachable = false;
try {
reachable = InetAddress.getByName(url[0]).isReachable(7000);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(reachable)
return "1";
else
return "0";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(result.equals("1"))
Toast.makeText(getApplicationContext(), "reachable", 500).show();
else
Toast.makeText(getApplicationContext(), "unreachable", 500).show();
}
}
並從onClick()方法調用它。
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new URLCheckTask().execute("www.google.com");
}
});
這次沒有例外。 但是...,即使我可以從仿真器的瀏覽器中調用它,結果也不正確,它始終顯示我無法訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.