检查网站是否可用

Check if website is available

我想检查网站是否可用。它在网站可用时有效,但每次无法连接到该网站时它都会崩溃。如果 NetTask class.

有问题
    String netAddress = null;
    try
    {
        netAddress = new NetTask().execute("www.googlasdasdde.com").get();
        if(netAddress == null || netAddress == "" || netAddress.isEmpty()){
            Log.d("111", "brak sieci");
        } else {
            Log.d("111", "server działa");

        }
    }
    catch (Exception e1)
    {
        e1.printStackTrace();
    }

和 NetTask:

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

在这里,如果无法连接,将抛出异常,并打印堆栈跟踪。

紧接着,您尝试 return addrhostAddress 成员,但在这种情况下 addrnull

要么在 try 块中添加一个 return 语句,并在 try catch 之后(或在 catch 块中)添加 return null,要么在 catch 块中抛出一个 Exception。

如果 addr 为空,则无法使用 .getHostAddress() 获取地址。只是 return 它为 null。

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

来自Documentation

public static InetAddress getByName(String host)
                          throws UnknownHostException

这意味着如果主机名不存在,函数抛出异常(如果未捕获则崩溃)实际上是正常行为。

所以只需要做一个修改就可以坚持抛接,就像这样:

java.net.InetAddress addr = null;
try {
    addr = java.net.InetAddress.getByName(params[0]);
    return addr.getHostAddress();
} catch (UnknownHostException e) {
    return null; }

这应该是 return 地址或 NULL。