【发布时间】:2012-03-27 07:31:59
【问题描述】:
我开发了一个简单的异步任务,并附加了进度对话框,以显示给定任务的进度。
它们工作得很好,没有任何问题,而且没有发生方向变化。我改变了设备的方向(我正在真实设备上测试),对话框出现在窗口中。
当方向改变时,我尝试手动关闭该进度对话框,但似乎没有任何影响该对话框。
这是我的异步任务代码:
class DownloadFileAsync extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DOWNLOAD_PROGRESS_DIALOG);
}
@Override
protected String doInBackground(String... params) {
File file = null;
try {
URL url = new URL(fileURL);
file = new File(fileName);
if(!file.exists()){
file.createNewFile();
}else{
return "0";
}
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
int lenghtOfFile = ucon.getContentLength();
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len1 = 0;
long total = 0;
while((len1 = is.read(buffer)) > 0){
total += len1;
publishProgress("" + (int) ((total*100)/lenghtOfFile));
fos.write(buffer, 0, len1);
}
fos.close();
return "1";
} catch (IOException e) {
if(file != null && file.exists()){
file.delete();
}
dismissDialog(DOWNLOAD_PROGRESS_DIALOG);
}
return "0";
}
@Override
protected void onProgressUpdate(String... values) {
try{
downloadProgress.setProgress(Integer.parseInt(values[0]));
}catch(Exception e){
}
}
@Override
protected void onPostExecute(String result) {
downloadResult = result;
dismissDialog(DOWNLOAD_PROGRESS_DIALOG);
}
}
以下是我的 oncreatedialog
@Override
protected Dialog onCreateDialog(int id) {
...
}case(DOWNLOAD_PROGRESS_DIALOG):{
if(downloadProgress == null){
downloadProgress = new ProgressDialog(this);
downloadProgress.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if(downloadResult == "1"){
FileStored newFileStored = new FileStored(fileName, new Date());
db.insertFile(newFileStored);
refreshLastDownload();
downloadResult = null;
}else{
showDialog(DOWNLOAD_PROBLEM);
}
downloadProgress = null;
}
});
Resources r = getResources();
downloadProgress.setMessage(r.getString(R.string.downloading));
downloadProgress.setIndeterminate(false);
downloadProgress.setMax(100);
downloadProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
downloadProgress.setCancelable(true);
downloadProgress.show();
}
return downloadProgress;
}case(DOWNLOAD_PROBLEM):{
if(this.downloadProblemDialog == null){
TextView problemView = new TextView(this);
problemView.setText(R.string.problem_download_text);
AlertDialog.Builder problemDialog = new AlertDialog.Builder(this);
problemDialog.setTitle(R.string.problem_download);
problemDialog.setView(problemView);
problemDialog.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
this.downloadProblemDialog = problemDialog.create();
}
return this.downloadProblemDialog;
}
...
最后是异步任务的调用
new DownloadFileAsync().execute(fileURL);
你能找到导致这种方向改变奇怪行为的任何错误吗?
提前谢谢你,
维芬
【问题讨论】:
-
当你改变设备的方向时它会产生问题吗?
-
我有过去的解决方案尝试,
标签: android android-asynctask progressdialog