异步图片下载
首先要做的是确保您请求下载清单文件中图像的权限。
<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 的小内部类。
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 使用的三种类型是
- params,参数的类型
执行后发送到任务。
- Progress,后台计算时发布的进度单位类型。
- Result,后台计算结果的类型。
因此,为了替换旧代码,我们现在可以使用
DownloadImagesTask task1 = new DownloadImagesTask();
task1.setImageId(R.id.img1);
task1.execute("http://assets.devx.com/articlefigs/39810_1.jpg");
这比我计划的时间要长得多。代码并不完美,但希望对您有所帮助。
注:这是基于连接到网络 at DevX
参考
- 连接到网络:http://www.devx.com/wireless/Article/39810/1954
- 异步任务:http://developer.android.com/reference/android/os/AsyncTask.html