Android:如何从AsyncTask中获取布尔结果?

Android:如何从AsyncTask中获取布尔结果?,android,android-asynctask,connection,Android,Android Asynctask,Connection,我想在我的应用程序中检查互联网连接。我发现了一个代码,但我不知道如何使用,因为我真的是一个初学者 我的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //I want something like

我想在我的应用程序中检查互联网连接。我发现了一个代码,但我不知道如何使用,因为我真的是一个初学者

我的代码:

@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); }
    }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//我想要这样的东西。
如果(InternetCheck==true){
Toast(“您已连接到internet”)
}
否则{
Toast(“连接失败”)
}
}
静态类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);}
}

但我不知道如何从AsyncTask中获得布尔结果。请教我。

您可以使用
get()
AsyncTask
获取结果:

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();
或者您可以在
onPostExecute()
中的
AsyncTask
中检查布尔结果:


这给了我错误。java.lang.IllegalStateException:无法执行任务:该任务已在运行。我删除了execute(),它的工作方式与charm相似谢谢它使用的是接口,我使用它时不使用execute()
@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();
                }
        }
@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();
                }
    }