作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 AsyncTask 连接互联网。 进度对话框 可以在 onPreExecute() 上显示,我检查该手机是否在线,如果是,则意味着它将执行 http 连接代码,同时关闭 onPostExecute() 上的进度对话框,并且它的工作正常。
但是如果网络连接在请求时可用并且连接在得到响应之前关闭意味着总是显示进度对话框,我会遇到问题。
现在我想解决这个问题,如果在获得响应之前互连断开意味着它会提醒我没有互联网连接并关闭进度对话框(可以将加载时间限制设置为 30 秒)。
下面是我的代码。
有人能帮忙吗?
public class SubjectTask extends AsyncTask<Void, Void, Integer> {
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(Login.this, "Loading",
"Please wait...");
//checkConnection();
}
@Override
protected Integer doInBackground(Void... arg0) {
if (isOnline()) { //using ConnectivityManager And Network Info
try {
//Http Request connections
} catch (Exception e) {
e.printStackTrace();
}
return 1;
} else {
alert("Check your internet connection");
return 0;
}
}
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}
最佳答案
您可以使用广播接收器来获取网络连接或断开连接的事件。在 doInbackground 方法中注册此接收器,并在 onPostExecute 方法中取消注册。
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivity.getActiveNetworkInfo();
//Play with the info about current network state
if(info.getState()== NetworkInfo.State.DISCONNECTED) {
// hide loader and show alert here
}
}
}
};
intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(broadcastReceiver, intentFilter);
关于java - 如何在 android AsyncTask 中设置等待互联网连接的时间限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902760/
我是一名优秀的程序员,十分优秀!