我想检查网站是否可用。它可以在网站可用时运行,但每次无法连接到网站时都会崩溃。如果NetTask类有问题。
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();
}
}
答案 0 :(得分:3)
assert_select 'div.panel-body div.pagination-main span', '1-5 of 5'
在这里,如果你无法连接,则会抛出异常,并打印堆栈跟踪。
在此之后,您尝试返回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();
}
}
hostAddress
成员,但在这种情况下addr
为addr
。
在try块中添加一个return语句,并在try catch之后(或在catch块中)返回null,或者在catch块中抛出一个Exception。
答案 1 :(得分:3)
如果addr
为空,则无法使用.getHostAddress()
获取地址。只需将其返回为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;
}
}
}
答案 2 :(得分:1)
public static InetAddress getByName(String host)
throws UnknownHostException
这意味着,如果主机名不存在,函数抛出异常(或者如果没有捕获则崩溃)实际上是正常 beahviour。
所以只需坚持使用一次修改即可获得一次修改,如下所示:
java.net.InetAddress addr = null;
try {
addr = java.net.InetAddress.getByName(params[0]);
return addr.getHostAddress();
} catch (UnknownHostException e) {
return null; }
这应该返回一个地址OR NULL。