代码之家  ›  专栏  ›  技术社区  ›  d-man

android html.from html从Web加载图像

  •  3
  • d-man  · 技术社区  · 15 年前

    我们如何从html.from html加载Web图像并将其设置为ImageView?

    1 回复  |  直到 13 年前
        1
  •  11
  •   Ally    15 年前

    异步图像下载

    首先要做的是确保您请求在清单文件中下载图像的权限。

    <uses-permission android:name="android.permission.INTERNET" />
    

    然后,要从Web下载图像,我们需要打开HTTP连接,下载并返回图像。这个方法应该放在活动中。

    private Bitmap DownloadImage(String URL)
    

    然后我们将下载的图像添加到ImageView

    Bitmap bitmap = DownloadImage("http://www.streetcar.org/mim/cable/images/cable-01.jpg");
    ImageView  img = (ImageView) findViewById(R.id.img);
    img.setImageBitmap(bitmap);
    

    但是,这不是异步的。

    通常我们会创建一个线程来做一些后台工作,但是一个线程不能更新它没有创建的视图。

    为了解决这个问题,我们可以使用 AsyncTask . 我已经编写了这个扩展AsyncTask的小内部类。

    class DownloadImagesTask extends AsyncTask<String, Integer, Bitmap> {
    
    private int imageViewID;
    
        protected void onPostExecute(Bitmap bitmap1) {
        setImage(imageViewID, bitmap1);
    }
    
        public void setImageId(int imageViewID) {
            this.imageViewID = imageViewID;
        }
    
        @Override
        protected Bitmap doInBackground(String... url) {
            Bitmap bitmap1 = 
                DownloadImage(url[0]);
            return bitmap1;
        }
    

    }

    AsyncTask使用的三种类型是

    1. 参数,参数的类型 执行时发送到任务。
    2. 进度,在后台计算期间发布的进度单位的类型。
    3. 结果,背景计算结果的类型。

    为了替换我们现在可以使用的旧代码

    DownloadImagesTask task1 = new DownloadImagesTask();
    task1.setImageId(R.id.img1);
    task1.execute("http://assets.devx.com/articlefigs/39810_1.jpg");
    

    这比我计划的要长得多。代码并不完美,但我希望它对您有所帮助。

    注:这是基于 Connecting to the web 在DevX

    工具书类