Загрузка изображений в реализации Android ImageView и Progressbar - PullRequest
1 голос
/ 19 августа 2011

Мне нужно загрузить изображение в ImageView. Я хочу использовать ProgressBar, чтобы сообщить пользователю, что программа загружает изображения. Если программа не может загрузить изображение в течение 30 секунд, она будет использовать Toast / AlertDialog для уведомления пользователя и выхода.

Как я могу реализовать эту функцию? Может ли кто-нибудь дать мне несколько советов о том, как построить структуру? Я могу завершить детали. Нужна ли мне нить? / AsyncTask?

Ответы [ 4 ]

1 голос
/ 19 августа 2011

Да, вам нужно загрузить изображение в AsyncTask (я предполагаю, что вы скачиваете с URL).Чтобы эффективно реализовать свои функциональные возможности, это то, что вам нужно сделать:

  1. Создать AsyncTask для загрузки вашего изображения (осуществить загрузку в doInBackground ()), а также иметь логическое значение (скажем, isImageDownloaded) для отслеживания, если изображениеуспешно загружен в postExecute ().Не забудьте также показать свой индикатор выполнения перед началом загрузки
  2. Выполните AsyncTask, чтобы начать загрузку
  3. Создать расширение android.os.CountDownTimer для обратного отсчета 30 секунд
  4. В методе onFinish () проверьте отслеживаемое логическое значение, если оно ложно, то вы отменяете 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()
        }
0 голосов
/ 19 августа 2011

Может быть это немного помогает.

Код индикатора выполнения, который вы можете найти здесь .

0 голосов
/ 19 августа 2011

Вы также можете увидеть это .Он будет охватывать процесс загрузки изображения в телефон, а также обеспечивать загрузку потоков во время загрузки изображения.

0 голосов
/ 19 августа 2011

Я надеюсь, что вы пытаетесь загрузить изображение с известного URL, я прав? Если это так, пожалуйста, посмотрите на этот URL

Надеюсь, это поможет вам ...

...