2011-05-09 21 views
3

私のアプリケーションは、データをダウンロードするためにリモートサーバに絶えず接続する必要があります。私は、データがダウンロードされている間に進行状況バーを実装し、ダウンロードの進行状況と推定時間も表示したいと考えています。サーバとの同期中の進行状況バー

誰でもこの方法をお勧めしますか?

答えて

2

それは同期の種類によって異なります...例えば:

  • あなたの同期プロセスは、すべての新しいデータ(たとえばJSONファイル)を含む唯一の1ファイルをダウンロードで構成されている場合、それは簡単です。あなたがダウンロードしたファイルの量を測定するだけです(Download a file with Android, and showing the progress in a ProgressDialogを参照してください)
  • あなたの同期プロセスが異なるファイル(例えば、画像、テキストなど)をダウンロードする場合...あなたは、どのくらいのファイルがダウンロードされて残っているかに依存しています。
  • 異なるファイルをダウンロードしても同期が異なる場合は、最初に、同期で使用するファイルの数と各ファイルのサイズをサーバーに問い合わせることができます。上記と同様にします。

理想的には、受信するファイルのサイズと、それらを使用するのに費やす時間を考慮する必要があります。

+0

クイックアンサーに感謝します。現時点では、jsonファイルをダウンロードしたいだけです。だからあなたが送ったリンクは私のために十分でなければなりません。私はこれを試してみましょう。問題の場合はあなたに教えてください。 – Sapan

+0

HI、私のメインクラスで私はprogressDialogを作成し、DownLoad File.Ifサーバーに接続する際にエラーが発生しました。進行状況バーのメッセージを更新して、進行状況ダイアログボックスを閉じます。私はdoInBackground関数のcatchブロックでこれをやろうとしましたが、エラーが発生します:元のスレッドだけが進捗ダイアログを変更できますか?どうすればいいですか?私はDownLoadファイルクラスのToastメッセージを作成することもできません – Sapan

+0

これは、doInBackgroundメソッドが別のスレッドで実行されるためです。その中にUIを入れるには、 'runOnUiThread'メソッドを使わなければなりません。それに関する情報を探します。 – Cristian

3

接続にはAsyncTaskを使用します。

preExecuteでは、ダウンロードするオブジェクトのサイズを取得し、オブジェクトの上限サイズでプログレスバーなどを作成します。

in onProgressUpdate前回の進行状況の更新からどれぐらいの時間が経過したかを計算し、時間を見積り、これまでの合計で進行状況バーを更新することができます。

関連する問題