Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用与套接字的连接来检查Internet_Java_Android - Fatal编程技术网

Java 使用与套接字的连接来检查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

我偶然发现了这个代码片段,通过打开一个套接字来检查internet访问-

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();