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 -- */ 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 = ; i < ; 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 = { "http://images.cnitblog.com/i///.png", "p" }; 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[];// 获取传来的参数,图片uri地址 String p = params[]; for (int i = ; 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 -- 图片适配器 */ 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( * ); 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; } }
以上内容给大家介绍了Android 中使用 AsyncTask 异步读取网络图片的相关知识,希望对大家有所帮助!
问题内容: 我在使用时遇到了麻烦,因为我之前从未见过它,也不知道我在用它做什么。 基本上,我正在关闭部队,因为我试图在主类上运行连接。有人可以帮我添加代码吗: 问题答案: 只是一个简单的例子,它看起来像:
本文向大家介绍Android中异步类AsyncTask用法总结,包括了Android中异步类AsyncTask用法总结的使用技巧和注意事项,需要的朋友参考一下 本文总结分析了Android中异步类AsyncTask用法。分享给大家供大家参考,具体如下: 最近整理笔记的时候,看到有关AsyncTask不是很理解,重新疏导了一下,有在网上找了一些资料,个人不敢独享,一并发在这里与大家共勉 这里有两种解
本文向大家介绍Android中AsyncTask异步任务使用详细实例(一),包括了Android中AsyncTask异步任务使用详细实例(一)的使用技巧和注意事项,需要的朋友参考一下 AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。 使用As
本文向大家介绍在Android的应用中实现网络图片异步加载的方法,包括了在Android的应用中实现网络图片异步加载的方法的使用技巧和注意事项,需要的朋友参考一下 前言 其实很幸运,入职一周之后就能跟着两个师兄做android开发,师兄都是大神,身为小白的我只能多多学习,多多努力。最近一段时间都忙的没机会总结,今天刚完成了android客户端图片异步加载的类,这里记录一下(ps:其实我这里都是参考
本文向大家介绍Android的异步任务AsyncTask详解,包括了Android的异步任务AsyncTask详解的使用技巧和注意事项,需要的朋友参考一下 AsyncTask,顾名思义,异步任务。说到异步,最简单的理解就是不同步。再复杂一点理解,就得举例子了。 假设我要去火车站买票,刚到火车站我突然发现我忘了带身份证。怎么办?怎么办! 想办法,想办法!我想我应该找个在学校的同学帮我送过来,因为我不
主要内容:本节引言:,1.相关概念,2.AsyncTask全解析:,3.AsyncTask使用示例:,本节小结:本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们一般是 继承AsyncTask,然后在类中实现异步操作,然后将异步执行的进度,反馈给UI主线程~ 好吧,可能有些概念大家不懂,觉得还是有必要讲解下多线程的概念,那就先解释下一些概念性的东西吧! 1.相关概念 1)什么是多线程: 答:先要了解这几个名称:应用程序,进程,线程,