I've developed a simple asynctask with progressdialog attached to it, to show progress of the given task.
They work nice, without any problem, while no orientation change occur. I've I change orientation of my device (I'm testing on real device), the dialog appears stuck in window.
I've tryied to dismiss that progress dialog manually, when orientation change, but nothing seems to affect that dialog.
Here is my asynctask code:
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);
}
}
And following is my 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;
}
...
Finally, the call to async task
new DownloadFileAsync().execute(fileURL);
Can you find anything wrong that leads to this orientation change weird behaviour?
Thank you in advance,
Vyrphan