Android 停止不确定进度条
我的android应用程序使用Android 停止不确定进度条,android,Android,我的android应用程序使用ProgressDialog。当向服务器发送http请求(RESTfulWebService)时显示对话框,当从服务器接收结果时隐藏对话框 private class GetMyTimeSheetTask extends AsyncTask<String, Void, String> { private ProgressDialog progress; protected String doInBackground(String...
ProgressDialog
。当向服务器发送http请求(RESTfulWebService)时显示对话框,当从服务器接收结果时隐藏对话框
private class GetMyTimeSheetTask extends AsyncTask<String, Void, String>
{
private ProgressDialog progress;
protected String doInBackground(String... params) {
MyTimeSheetFragment.this.getActivity().runOnUiThread(new Runnable() {
public void run() {
progress = new ProgressDialog(MyTimeSheetFragment.this.getContext());
progress.setTitle(getResources().getString(R.string.app_name));
progress.setMessage(getResources().getString(R.string.loading));
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.setCancelable(false);
progress.show();
}
} );
String result = HttpUtil.httpGet(
params[0], params[1],
params[2], params[3],
params[4]);
return result;
}
protected void onPostExecute(String param) {
progress.dismiss();
....
}
}
私有类GetMyTimeSheetTask扩展异步任务
{
私人进展对话进展;
受保护的字符串doInBackground(字符串…参数){
MyTimeSheetFragment.this.getActivity().runOnUiThread(新的Runnable()){
公开募捐{
progress=newprogressdialog(MyTimeSheetFragment.this.getContext());
setTitle(getResources().getString(R.string.app_name));
setMessage(getResources().getString(R.string.loading));
progress.setProgressStyle(ProgressDialog.STYLE\u微调器);
进度。可设置可取消(false);
progress.show();
}
} );
字符串结果=HttpUtil.httpGet(
参数[0],参数[1],
参数[2],参数[3],
参数[4]);
返回结果;
}
受保护的void onPostExecute(字符串参数){
进步。解散();
....
}
}
问题是有时服务器有问题,进度对话框永远显示,我不知道如何关闭它。如何解决这个问题?感谢您的帮助。尝试将超时方案与异步任务一起实施当出现错误时,您的HttpUtil将返回错误消息,当超时时,您将返回超时信息,以便在收到这些异常消息时隐藏对话框。 我看不到HttpUtil代码,这里可能是目前为止的解决方案:
private class GetMyTimeSheetTask extends AsyncTask<String, Void, String> {
private static final int REQUEST_TIMEOUT = 5000;
private ProgressDialog progress;
private Handler handler = new Handler(Looper.getMainLooper());
private Runnable hideDialogTask = new Runnable(){
@Override
public void run() {
progress.dismiss();
}
};
protected String doInBackground(String... params) {
MyTimeSheetFragment.this.getActivity().runOnUiThread(new Runnable(){
public void run() {
progress = new ProgressDialog(MyTimeSheetFragment.this.getContext());
progress.setTitle(getResources().getString(R.string.app_name));
progress.setMessage(getResources().getString(R.string.loading));
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.setCancelable(false);
progress.show();
handler.postDelayed(hideDialogTask, REQUEST_TIMEOUT);
}
} );
String result = HttpUtil.httpGet(
params[0], params[1],
params[2], params[3],
params[4]);
return result;
}
protected void onPostExecute(String param) {
progress.dismiss();
....
}
}
私有类GetMyTimeSheetTask扩展异步任务{
私有静态最终整数请求\u超时=5000;
私人进展对话进展;
私有处理程序Handler=新处理程序(Looper.getMainLooper());
private Runnable hideDialogTask=new Runnable(){
@凌驾
公开募捐{
进步。解散();
}
};
受保护的字符串doInBackground(字符串…参数){
MyTimeSheetFragment.this.getActivity().runOnUiThread(新的Runnable()){
公开募捐{
progress=newprogressdialog(MyTimeSheetFragment.this.getContext());
setTitle(getResources().getString(R.string.app_name));
setMessage(getResources().getString(R.string.loading));
progress.setProgressStyle(ProgressDialog.STYLE\u微调器);
进度。可设置可取消(false);
progress.show();
postDelayed(hideDialogTask,请求超时);
}
} );
字符串结果=HttpUtil.httpGet(
参数[0],参数[1],
参数[2],参数[3],
参数[4]);
返回结果;
}
受保护的void onPostExecute(字符串参数){
进步。解散();
....
}
}
您可以在未收到特定秒数的响应或null&&progressdialog.isshowing()后运行asyc in处理程序和in处理程序,然后取消对话框并显示一些错误消息。此外,请在关闭对话框时检查活动的生命周期: