我正在检查onPreExecute()中的互联网连接状态,如果没有互联网连接,则不应执行doInBackground()和onPostExecute()
new getStatus().execute();
private class getStatus extends AsyncTask<Void, Void, Void> {
答案 0 :(得分:4)
您在onPreExecute的AsyncTask中设置了一个标志。检查其他两个函数中的该标志,如果该标志为真,则立即返回。
答案 1 :(得分:1)
这样做:
public boolean hasInternetConnection(final Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager)context.
getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
boolean isConnected = networkInfo.isConnectedOrConnecting() && networkInfo.isAvailable() && networkInfo.isConnected();
return isConnected;
}
将它放在onCreate()或任何你想要执行任务的地方,取决于结果如下:
if(hasInternetConnection(YourActivity.this){
//executeTask
}else{
//redirect user to Wifi Settings with dialog
}
希望它有所帮助!!!
答案 2 :(得分:1)
由于Internet连接可以随时消失,为什么不简单地执行任务并处理IOException呢?如果没有连接,我想发出一个http请求或者你正在做的任何事情都会立即失败。您甚至可以在尝试之前添加一个检查,但是这样的检查不应该在网络请求期间替换错误处理。
我可能会将所有逻辑放在doInBackground中。如果我首先添加连接检查,我将以与实际请求期间发生的任何网络异常相同的方式处理它。 至于实际的错误处理,您可以将错误代码存储为asynctask中的成员,您可以让asynctask在包含数据和错误代码的自定义类上工作,或者甚至可以让doInBackground在出现错误时返回null并且直接从doInBackground处理错误。