I got a AsyncTask
that is supposed to check the network access to a host name. But the doInBackground()
is never timed out. Anyone have a clue?
public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean> {
private Main main;
public HostAvailabilityTask(Main main) {
this.main = main;
}
protected Boolean doInBackground(String... params) {
Main.Log("doInBackground() isHostAvailable():"+params[0]);
try {
return InetAddress.getByName(params[0]).isReachable(30);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
protected void onPostExecute(Boolean... result) {
Main.Log("onPostExecute()");
if(result[0] == false) {
main.setContentView(R.layout.splash);
return;
}
main.continueAfterHostCheck();
}
}
Best Answer
If the device is in airplane mode (or presumably in other situations where there's no available network),
cm.getActiveNetworkInfo()
will benull
, so you need to add anull
check.Modified (Eddie's solution) below:
Also add the following permission to the
AndroidManifest.xml
:One other small point, if you absolutely need a network connection at the given point in time, then it might be better to use
netInfo.isConnected()
rather thannetInfo.isConnectedOrConnecting
. I guess this is up to the individual use-case however.