-4

I came across this code snippet to check for internet access by opening a 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); }
}

But how do I actually use this AsyncTask? In my MainActivity, I call new InternetCheck().execute(); but how to pass the Consumer param to it? PS - I just started with Android so sorry for being a noob here.

  • Any minimal example to show the usage would be appreciated – user8587865 Jan 28 '19 at 13:43
  • It's always a good idea to read [the documentation](https://developer.android.com/reference/android/os/AsyncTask). Android's docs are pretty good too. – TheWanderer Jan 28 '19 at 13:49
  • This code is not correct. It treats too many cases as failures. For example, a `ConnectException: connection refused` would indicate that the Internet is accessible. It also leaks sockets in the failure cases. This doesn't do anything more than `InetAddess.isReachable()`. – user207421 Jan 29 '19 at 04:57

3 Answers3

3

Simply use new InternetCheck(consumer).execute()

new InternetCheck(new InternetCheck.Consumer() {
            @Override
            public void accept(Boolean internet) {
                Log.d("Internet", "Internet Connection" + internet);
            }
        }).execute();
Chandan Sharma
  • 2,803
  • 1
  • 17
  • 25
1

You need to pass the instance of Consumer interface inside your InternetCheck AsyncTask

SAMPLE CODE

 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();
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
0

You can pass consumer parameter like this:

new InternetCheck(mConsumer).execute();
DB377
  • 403
  • 4
  • 11