PDF を 1 つずつダウンロードしてビューに表示するアプリケーションを作成しています。ビューには次のボタンがあり、onClick は PDF (前の次のクリックでダウンロードされたもの) を表示し、次のボタンが再度クリックされたときに表示される次の PDF をダウンロードします。AsyncTasks を使用してファイルをダウンロードしています。ファイルごとに 1 つの AsyncTask とその中に ProgressDialog があります。ユーザーが次のボタンをクリックし、表示するファイル(前の次のクリックでダウンロードされるはずだった)がまだダウンロード中の場合、プログレスバーを表示して、ダウンロードが完了するまで待ちます。以下は私のコードのスニペットです..
public void saveFile(String uri, int index)
{
if(!f.exists())
{
Downloader downloader = new Downloader(f, index);
//adding the downloader to the list
downloaders.add(downloader);
downloader.execute(uri);
}
}
ここに私がPDFを表示する方法があります
private void showPdf(){
[...]
if(!completed[to_show]){
downloaders.get(to_show).mProgressDialog.show();
}
[...]
}
ここに私のAsyncTaskコードがあります
private class Downloader extends AsyncTask<String, Integer, String> {
ProgressDialog mProgressDialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.show();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
completed[fileNum] = true;
Log.e("PDFReaderAct",String.valueOf(fileNum)+" download complete");
mProgressDialog.dismiss();
}
public Downloader() {
[...]
mProgressDialog = new ProgressDialog(PDFReaderAct.this);
[...]
}
@Override
protected String doInBackground(String...params ) {
try
{
//Code to download the file
publishProgress((int) (total * 100 / fileLength));
os.write(bytes, 0, count);
}
[...]
}
}
@Override
protected void onProgressUpdate(final Integer... progress) {
super.onProgressUpdate(progress);
runOnUiThread( new Runnable() {
public void run() {
// TODO Auto-generated method stub
mProgressDialog.setProgress(progress[0]);
}
});
}
}
このコードを実行すると、プログレスバーが表示されますが、showPdf() メソッドが実行された後です。ファイルのダウンロードごとに AsyncTasks と progressDialogs を追跡しています。以前のダウンロードの進行状況を表示するにはどうすればよいですか?
ありがとう、