android html.fromhtml从网页加载图片

问题描述:

html.fromhtml如何从web加载图片并设置为imageview?android html.fromhtml从网页加载图片

+1

你能澄清,如果这是你的问题吗? “我们如何从网上下载图像并将其显示在Android'ImageView'中?” – 2010-01-02 13:29:34

+0

我已经删除了旧的答案,并添加了一个处理异步需求的答案。请让我知道,如果你有任何问题。 – Ally 2010-01-02 21:41:57

异步图片下载

首先要做的是确保你请求允许下载清单文件内的图像。

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

然后,要从网上下载图像,我们需要打开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. PARAMS,在执行时发送给任务的参数 的类型。
  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

参考

+0

这看起来不错,但是当我使用自定义listview的代码时,每个listitem都有一个行图标图像,并且正在执行新的异步任务以显示每个行图标的图像。 但是图像没有在第一行的第二行和第二行图像显示适当的第一行图像为什么虽然我通过imageview引用asyntask但仍然有同样的问题。 – 2010-01-03 06:23:32

+0

那么你最初的问题解决了吗?我不确定发生了什么事。如果你想让我看看你的新问题,然后张贴一些代码。 :) – Ally 2010-01-03 19:44:29

+0

很好的答案,谢谢! – Hamy 2010-12-04 04:01:02