1

我需要在ImageView. 我想用 aProgressBar告诉用户程序正在下载图像。如果程序在 30 秒内无法下载图像,程序将使用Toast/AlertDialog通知用户并退出。

我该如何实现这个功能?谁能给我一些关于如何构建框架的建议?我可以完成细节。我需要线程吗?/异步任务?

4

4 回答 4

1

是的,您确实需要在 AsyncTask 中下载图像(我假设您是从 URL 下载的)。有效地实现您的功能,这是您需要做的:

  1. 创建 AsyncTask 来下载你的图像(在 doInBackground() 中实现下载),还有一个布尔值(比如 isImageDownloaded)来跟踪图像是否在 postExecute() 中成功下载。在开始下载之前不要忘记显示您的进度条
  2. 执行您的 AsyncTask 以启动下载
  3. 创建 android.os.CountDownTimer 的扩展以倒计时 30 秒
  4. 在 onFinish() 方法上检查您跟踪的布尔值,如果它是假的,那么您取消 AsyncTask 并抛出您想要的 toast/dialog

下面是我上面提到的步骤的伪代码/骨架(没有检查语法,所以我为任何错误道歉)



    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

我希望您尝试从已知网址下载图像,对吗?如果是这样,请查看此网址

希望对你有帮助...

于 2011-08-19T18:03:51.083 回答