【发布时间】:2019-01-29 12:43:25
【问题描述】:
我遇到了这段代码 sn-p 通过打开一个 Socket 来检查互联网访问-
class InternetCheck extends AsyncTask<Void,Void,Boolean> {
private Consumer mConsumer;
public interface Consumer { void accept(Boolean internet); }
public InternetCheck(Consumer consumer) { mConsumer = consumer; execute(); }
@Override protected Boolean doInBackground(Void... voids) { try {
Socket sock = new Socket();
sock.connect(new InetSocketAddress("8.8.8.8", 53), 1500);
sock.close();
return true;
} catch (IOException e) { return false; } }
@Override protected void onPostExecute(Boolean internet) { mConsumer.accept(internet); }
}
但是我如何实际使用这个 AsyncTask?
在我的MainActivity 中,我调用new InternetCheck().execute(); 但如何将Consumer 参数传递给它?
PS - 我刚开始使用 Android,很抱歉在这里成为菜鸟。
【问题讨论】:
-
任何显示用法的最小示例将不胜感激
-
阅读the documentation 总是一个好主意。 Android 的文档也很不错。
-
此代码不正确。它将太多的案例视为失败。例如,
ConnectException: connection refused表示可以访问 Internet。它还会在失败的情况下泄漏套接字。这除了InetAddess.isReachable()没有任何作用。