[英]Android: How to get boolean result from AsyncTask?
我想在我的应用程序中检查Internet连接。 我找到了代码,但由于我是一个真正的初学者,所以不知道如何使用。
我的代码:
@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获得布尔结果。 请教我。
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();
您可以使用get()
从AsyncTask
获得结果:
@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();
}
}
或者,您可以在onPostExecute()
中的AsyncTask
中检查布尔结果:
@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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.