1.新建Android工程AsyncLoadPicture

新建布局文件activity_main.xml主界面为一个GridView,还有其子项布局文件gridview_item.xml

2.功能主界面MainActivity.java,主代码如下

 package com.example.asyncloadpicture;

 import java.util.ArrayList;

 import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.GridView; /**
* @author ymw
* @data 2014-12-03
*/
public class MainActivity extends Activity { private GridView gridViewImg;
private ArrayList<ImageEntity> imageList = new ArrayList<ImageEntity>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); gridViewImg = (GridView) findViewById(R.id.gridViewImg);
initData();
} private void initData() {
for (int i = 0; i < 15; i++) {
ImageEntity b = new ImageEntity();
b.setImage(BitmapFactory.decodeResource(getResources(),
R.drawable.nopicture)); imageList.add(b);
} ImageAdapter adapter = new ImageAdapter(getApplicationContext(),
imageList);
gridViewImg.setAdapter(adapter);
String[] params = {
"https://images0.cnblogs.com/i/169207/201408/112229149526951.png",
"p2" };
new ImageLoadTask(getApplicationContext(), adapter).execute(params);
} /** 图片异步加载类 */
public class ImageLoadTask extends AsyncTask<String, Void, Void> {
private ImageAdapter adapter; public ImageLoadTask(Context context, ImageAdapter adapter) {
this.adapter = adapter;
} @Override
protected Void doInBackground(String... params) {
String url = params[0];// 获取传来的参数,图片uri地址
String p2 = params[1];
for (int i = 0; i < adapter.getCount(); i++) {
ImageEntity bean = (ImageEntity) adapter.getItem(i);
Bitmap bitmap = BitmapFactory.decodeStream(Request
.HandlerData(url));
bean.setImage(bitmap);
publishProgress(); // 通知去更新UI
} return null;
} public void onProgressUpdate(Void... voids) {
if (isCancelled())
return;
// 更新UI
adapter.notifyDataSetChanged();
}
} /** 图片实体 */
public class ImageEntity {
private Bitmap image; public Bitmap getImage() {
return image;
} public void setImage(Bitmap image) {
this.image = image;
} }
}

3.GridView列表图片适配器代码ImageAdapter.java

 package com.example.asyncloadpicture;

 import java.util.ArrayList;

 import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView; import com.example.asyncloadpicture.MainActivity.ImageEntity; /**
*
* @author ymw
* @data 2014-12-03 图片适配器
*/
public class ImageAdapter extends BaseAdapter { private Context _context;
private ArrayList<ImageEntity> _list; public ImageAdapter(Context context, ArrayList<ImageEntity> imageList) {
this._context = context;
this._list = imageList;
} @Override
public int getCount() {
return _list.size();
} @Override
public Object getItem(int position) {
return _list.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(_context);
convertView = inflater.inflate(R.layout.gridview_item, null); ImageView imgView = (ImageView) convertView.findViewById(R.id.imgView);
ImageEntity b = _list.get(position);
// 如果有图片则读取,没有则跳过
if (b.getImage() != null) {
imgView.setImageBitmap(b.getImage());
}
return convertView;
}
}

4.请求网络读取图片的类Request.java

 package com.example.asyncloadpicture;

 import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection; import android.graphics.drawable.Drawable;
import android.util.Log; /**
* 工具类,主要根据url读取图片返回流的方法
*
* @author ymw
*
*/
public class Request {
public static InputStream HandlerData(String url) {
InputStream inStream = null; try {
URL feedUrl = new URL(url);
URLConnection conn = feedUrl.openConnection();
conn.setConnectTimeout(10 * 1000);
inStream = conn.getInputStream();
} catch (Exception e) {
e.printStackTrace();
} return inStream;
} /** 直接返回Drawable对象设置图片 */
public static Drawable loadImageFromNetwork(String imageUrl) {
Drawable drawable = null;
try {
// 可以在这里通过文件名来判断,是否本地有此图片
drawable = Drawable.createFromStream(
new URL(imageUrl).openStream(), "image.jpg");
} catch (IOException e) {
Log.d("test", e.getMessage());
}
if (drawable == null) {
Log.d("test", "null drawable");
} else {
Log.d("test", "not null drawable");
} return drawable;
}
}

5.代码实例如下链接:

http://files.cnblogs.com/_ymw/AsyncLoadPicture_%E5%8D%9A%E5%AE%A2%E9%99%84%E4%BB%B6.rar

  

Android 利用 AsyncTask 异步读取网络图片的更多相关文章

  1. Android 多线程----AsyncTask异步任务详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  2. android 开发-AsyncTask异步任务的实现

     AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过 ...

  3. Android中AsyncTask异步

    今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...

  4. Android使用AsyncTask异步线程网络通信获取数据(get json)

    摘要: android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法. 内容: 1.添加Ht ...

  5. Android 利用Service实现下载网络图片至sdk卡

    package com.example.myapp5; import android.app.Activity; import android.content.Intent; import andro ...

  6. WP_图片管理机制/异步读取网络图片

    项目有这样的需求, 要求窗口加载一揽子图片,为了不让UI阻塞太久,采用异步读取后绑定显示的方案. 图片的下载应该采用并发的过程(等待网络响应会很耗时,一张一张的下载,等待时间太长) 图片的下载不能占用 ...

  7. Android利用Volley异步载入数据完整具体演示样例(二)

    MainActivity例如以下: package cc.y; import android.app.Activity; import android.content.Context; import ...

  8. Android利用Handler异步获取子线程中的产生的值

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     近段时间有一个需求:在线获取图片并且显示在界面 ...

  9. Android读取网络图片

    本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在android4.0之后,已不同意在主线程中进行网络请求操作了, 否则会出现N ...

随机推荐

  1. 抽象类的作用之一:sdk 传递你需要的参数

    抽象类可以干什么?抽象类可以让别人必须做一件事情,比如实现一个方法. 那它有什么作用呢? 我开始也不知道啊,后来慢慢的知道了,在开发中,我知道了它是干什么的,怎么用的.比如你要写一个sdk给别人用.但 ...

  2. Javacript实现倒计时

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. mt_vqmon异常数据分析

    mt_vqmon异常数据分析 1.首缓冲时间值异常(1) 分析:当第一个m3u8请求时,已经记录request时间,1423716972224, 正常情况会立即请求分片列表. 上述图表明请求了一个m3 ...

  4. sweetalert : 一个比较好看的弹出框

    1.引入 <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"> </script& ...

  5. PoolManager

    我用的PoolManager版本是5.5.2的,导入的包总共有三个文件夹:Editor,Plugins,PoolManagerExampleFiles 1.Editor这个文件夹里面的东西,顾名思义, ...

  6. rownum浅谈(一)

    只要做web开发,几乎没有不需要分页查询的,在oracle中,rownum就是用来进行处理分页的. 1.rownum是oracle对结果集返回的一个伪列,也就是说是先查询完结果之后再加上的一个虚列,相 ...

  7. django orderby

    https://www.douban.com/group/topic/44329052/

  8. mssql 格式化字符串 /时间 年月日时分秒

    比如:1 想格式化 000001,100 格式化为000100: 思路是这样的 1000000 +格式化的数字 取后6位: select   right(cast(power(10,6) as var ...

  9. ConfigurationManager.ConnectionStrings 类库 取不到值 报错 初始化错误

    是因为我把 config 文件写在了 类库中,(擦,很久之前就处理过好多次,总是忘记 写个文章记录下来) 其实应该放在 主目录底下的 web.comfig 里 就是网站项目的 配置文件里,类库找的 是 ...

  10. [NC2018-9-9T1]中位数

    题目大意:给你一个长度为$n$的序列,要求出长度大于等于$len$的字段的中位数中最大的一个中位数 题解:可以二分答案,对于比它小的数赋成$-1$,大的赋成$1$.求前缀和,若有一段区间的和大于$0$ ...