Android: Как получить логический результат от AsyncTask? - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу проверить подключение к Интернету в моем приложении.Я нашел код, но не знаю, как его использовать, так как я действительно новичок.

Мой код:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            //I want something like this.
            if(InternetCheck==true){
                Toast("You are connected to internet")
            }
            else{
            Toast("Connection Failed")
            }

    }

 static 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.Пожалуйста, научи меня.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете получить результат из AsyncTask, используя get():

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                Boolean result = new InternetCheck().execute().get();
                if (result == true) {
                    Toast.makeText(this, "You are connected to internet", Toast.LENGTH_LONG).show();
                } else { 
                    Toast.makeText(this, "Connection Failed", Toast.LENGTH_LONG).show();
                }
        }

Или вы можете проверить логический результат в AsyncTask в onPostExecute():

@Override 
    protected void onPostExecute(Boolean internet) { 
        mConsumer.accept(internet);
        if (internet == true) {
                    Toast.makeText(YourActivity.this, "You are connected to internet", Toast.LENGTH_LONG).show();
                } else { 
                    Toast.makeText(YourActivity.this, "Connection Failed", Toast.LENGTH_LONG).show();
                }
    }
0 голосов
/ 26 сентября 2018
new InternetCheck(new InternetCheck.Consumer() {
    @Override
    public void accept(Boolean connected) {
        if (connected) {
            Log.d("TAG", "Internet is connected");
        } else {
            Log.d("TAG", "Internet is not connected");
        }     
    }
}).execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...