Java 使用与套接字的连接来检查Internet
我偶然发现了这个代码片段,通过打开一个套接字来检查internet访问-Java 使用与套接字的连接来检查Internet,java,android,Java,Android,我偶然发现了这个代码片段,通过打开一个套接字来检查internet访问- class InternetCheck extends AsyncTask<Void,Void,Boolean> { private Consumer mConsumer; public interface Consumer { void accept(Boolean internet); } public InternetCheck(Consumer consumer) { mConsumer = c
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); }
}
class InternetCheck扩展了异步任务{
私人消费者;
公共接口使用者{void accept(布尔互联网);}
公共InternetCheck(使用者){mConsumer=Consumer;execute();}
@重写受保护的布尔doInBackground(Void…voids){try{
插座插座=新插座();
sock.connect(新的InetSocketAddress(“8.8.8.8”,53),1500);
sock.close();
返回true;
}catch(IOE异常){return false;}}
@重写受保护的void onPostExecute(布尔internet){mConsumer.accept(internet);}
}
但是我实际上如何使用这个异步任务呢?
在我的main活动中
,我调用newinternetcheck().execute()代码>但是如何将消费者
参数传递给它?
PS-我刚开始使用Android,很抱歉在这里成为一个noob。只需使用新的InternetCheck(消费者)。execute()
您可以按如下方式传递使用者参数:
new InternetCheck(mConsumer).execute();
您需要在InternetCheck
AsyncTask任务中传递Consumer
接口的实例
示例代码
new InternetCheck(new Consumer() {
@Override
public void accept(Boolean internet) {
if(internet){
Log.e("INTENET_STATUS","Intenet is avilable");
}else {
Log.e("INTENET_STATUS","Intenet Not avilable");
}
}
}).execute();
任何显示用法的最小示例都会受到赞赏。阅读总是一个好主意。Android的文档也很好。这个代码不正确。它将太多的案例视为失败。例如,一个ConnectException:connectionseeded
将表示可以访问Internet。在发生故障的情况下,它还会泄漏插座。这只不过是InetAddess.isReachable()
。该类接受消费者
参数,如何传递它?@user8587865@thelower,谢谢,但我仍然无法处理如何传递消费者
@ChandanSharma,请解释如何声明消费者
。你试过运行这个代码吗?你能分享一个简单的例子吗?如果你在accept()方法中获得internet连接,请再次检查。
new InternetCheck(new Consumer() {
@Override
public void accept(Boolean internet) {
if(internet){
Log.e("INTENET_STATUS","Intenet is avilable");
}else {
Log.e("INTENET_STATUS","Intenet Not avilable");
}
}
}).execute();