【问题标题】:Use Connection to a Socket to check for Internet使用连接到套接字来检查 Internet
【发布时间】: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() 没有任何作用。

标签: java android


【解决方案1】:

只需使用new InternetCheck(consumer).execute()

new InternetCheck(new InternetCheck.Consumer() {
            @Override
            public void accept(Boolean internet) {
                Log.d("Internet", "Internet Connection" + internet);
            }
        }).execute();

【讨论】:

  • 类接受Consumer参数,如何传递?
  • @TheWanderer,谢谢,但我仍然无法处理我应该如何通过Consumer
  • @ChandanSharma,请解释如何声明consumer。您是否尝试过运行此代码?你能分享一个最小的例子吗?
  • 请再次检查您是否在 accept() 方法中获得了互联网连接。
【解决方案2】:

您需要在InternetCheck AsyncTask 中传递Consumer interface 的实例

示例代码

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

【讨论】:

    【解决方案3】:

    你可以像这样传递消费者参数:

    new InternetCheck(mConsumer).execute();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多