1

で画像をダウンロードする必要がありますImageViewProgressBarプログラムが画像をダウンロードしていることをユーザーに通知するためにを使用したいと思います。プログラムが30秒以内に画像をダウンロードできない場合、プログラムはToast/AlertDialogを使用してユーザーに通知し、終了します。

この関数を実装するにはどうすればよいですか?フレームワークの構築方法について誰かアドバイスをいただけますか?詳細を記入できます。スレッドが必要ですか?/ AsyncTask?

4

4 に答える 4

1

はい、AsyncTaskで画像をダウンロードする必要があります(URLからダウンロードしていると想定しています)。機能を効果的に実現するには、次のことを行う必要があります。

  1. AsyncTaskを作成してイメージをダウンロードし(doInBackground()でダウンロードを実装)、postExecute()でイメージが正常にダウンロードされたかどうかを追跡するブール値(isImageDownloadedなど)も用意します。ダウンロードを開始する前に、プログレスバーも表示することを忘れないでください
  2. AsyncTaskを実行してダウンロードを開始します
  3. android.os.CountDownTimerの拡張子を作成して30秒カウントダウンします
  4. onFinish()メソッドで、追跡するブール値を確認します。falseの場合は、AsyncTaskをキャンセルして、意図したトースト/ダイアログをスローします。

以下は、上記の手順の擬似コード/スケルトンです(構文をチェックしなかったため、エラーが発生したことをお詫びします)



    public void downloadAndCheck() {
                AsyncTask downloadImageAsyncTask = 
                    new AsyncTask() {

                    @Override
                    protected Boolean doInBackground(Void... params) {
                        // download image here, indicate success in the return boolean
                    }

                    @Override
                    protected void onPostExecute(Boolean isConnected) {
                        // set the boolean result in a variable
                        // remove the progress bar 
                    }
                };

                try {
                    downloadImageAsyncTask.execute();
                } catch(RejectedExecutionException e) {
                    // might happen, in this case, you need to also throw the alert
                    // because the download might fail
                }


                // note that you could also use other timer related class in Android aside from this CountDownTimer, I prefer this class because I could do something on every interval basis
                // tick every 10 secs (or what you think is necessary)
                CountDownTimer timer = new CountDownTimer(30000, 10000) {

                    @Override
                    public void onFinish() {
                        // check the boolean, if it is false, throw toast/dialog
                    }

                    @Override
                    public void onTick(long millisUntilFinished) {
                        // you could alternatively update anything you want every tick of the interval that you specified
                    }

                };

                timer.start()
        }
于 2011-08-19T18:27:38.897 に答える
0

たぶん、これは少し役立ちます。

プログレス バーのコードはこちらにあります

于 2011-08-19T18:07:33.140 に答える
0

これも見ることができます。イメージを電話にダウンロードするプロセスと、イメージのダウンロード中にロード スレッドを提供するプロセスについて説明します。

于 2011-08-19T18:08:18.810 に答える
0

既知の URL から画像をダウンロードしようとしていると思いますが、よろしいですか? もしよろしければこちらのURLをご覧ください

それがあなたを助けることを願っています...

于 2011-08-19T18:03:51.083 に答える