【发布时间】:2019-10-19 18:43:11
【问题描述】:
我想在我的 onClick 中启动方法之前检查与特定网站的 Internet 连接。在做了一些研究之后,我发现这个链接谁接受的答案告诉我如何做到这一点Android Internet connectivity check better method 问题是虽然该方法产生错误 android os networkonmainthreadexception,但我做了更多的研究,发现这样的操作需要异步运行任务。我怎样才能做到这一点,并且仍然在我的按钮 onClick 方法中使用结果。
这是我在onCreate 中的当前代码。
@Override
public void onClick(View view) {
if (isInternetAvailable("18.184.67.80", 443, 1000)) {
Method() ;
} else {
Toast.makeText(getApplicationContext)) , "Internet not available" ).show;
}
}
以下是检查与网站的互联网连接的代码
public boolean isInternetAvailable(String address, int port, int timeoutMs) {
try {
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress(address, port);
sock.connect(sockaddr, timeoutMs); // This will block no more than timeoutMs
sock.close();
return true;
} catch (IOException e) {
return false;
}
}
我将如何在异步任务中使用上述代码,并在 oncreate 方法的 if 语句中使用结果来判断是否没有互联网连接?
早些时候我也发现了这个How to check internet access on Android? InetAddress never times out,但我不明白我将使用什么代码从异步任务中获取结果并在 onClick 下的 oncreate 中使用它们。
【问题讨论】:
-
一般的解决方案是创建某种
Future(通过ExecutorService/ThreadPool),然后在它完成后,在结果上执行。这里的重点是不要阻塞主线程(例如等待 I/O),所以这里的CompletableFuture很方便,因为您可以使用#whenComplete等在使用 lambdas / 函数 api -
对不起,请你告诉我该怎么做
标签: java android android-asynctask