我正在onPreExecute()中检查网络连接状态,如果没有网络连接,则不应执行doInBackground()和onPostExecute()
new getStatus().execute();
private class getStatus extends AsyncTask<Void, Void, Void> {
在onPreExecute中设置AsyncTask中的一个标志。在其他两个函数中检查该标志,并且如果标志为true,则立即返回。
onPreExecute()
中调用 cancel()
,但这并不是保证的,对吧? - YazanDo this:
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;
}
if(hasInternetConnection(YourActivity.this){
//executeTask
}else{
//redirect user to Wifi Settings with dialog
}
由于互联网连接随时可能中断,为什么不直接执行任务并在发生IOException时处理它呢?如果没有连接,我猜测进行http请求或者其他操作会立即失败。当然,你可以在尝试之前添加检查,但这样的检查不应该替代网络请求期间的错误处理。
我可能会把所有逻辑放在doInBackground中。如果我先添加一个连接性检查,我会像处理实际请求期间发生的任何网络异常一样处理它。 至于实际的错误处理,你可以将错误代码存储为asynctask的成员变量,也可以让asynctask处理包含数据和错误代码的自定义类,甚至可以使doInBackground在出现错误时返回null并直接从doInBackground处理错误。
onPreExecute()
中,OP可以简单地Toast“无连接...”,但是如果它已经达到了'doInBackground(),那么该提示应该从
onPostExecute()出现,但是如何实现呢?假设
doInBackground()`返回对象数组或某些JSON,则OP无法控制例如因服务器上没有数据或操作失败而返回“null”或“无连接”,对吗? - Yazan