简体   繁体   English

如何知道任何网址的可达性?

[英]How to know the reachable of any url address?

I wrote the following method to know the reachable of url. 我编写了以下方法来了解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;
}

and I call it like that. 我这样称呼它。

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();
    }
});

But android.os.NetworkMainThreadException occur, do I need anything to put in my androidmanifest.xml file or my idea is being wrong? 但是发生android.os.NetworkMainThreadException,我是否需要在androidmanifest.xml文件中放入任何内容,或者我的想法有误?

NetworkMainThreadException is thrown when an application attempts to perform a networking operation on its main thread. 当应用程序尝试在其主线程上执行联网操作时,将引发NetworkMainThreadException

Please try to perform that in an AysncTask or another thread. 请尝试在AysncTask或其他线程中执行该操作。

Reference: 参考:

http://developer.android.com/reference/android/os/AsyncTask.html http://developer.android.com/reference/android/os/AsyncTask.html

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

I wrote the following inner class. 我写了以下内部类。

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();
    }

}

and call it from onClick() method. 并从onClick()方法调用它。

btnSubmit.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            new URLCheckTask().execute("www.google.com");
        }
    });

No exception occur this time. 这次没有例外。 But...., the result is not correct even though I can call it from emulator's browser, it always show me unreachable. 但是...,即使我可以从仿真器的浏览器中调用它,结果也不正确,它始终显示我无法访问。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM