这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了Android 中使用 AsyncTask 异步读取网络图片的相关资料,需要的朋友可以参考下
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 异步读取网络图片的相关知识,希望对大家有所帮助!
来源: http://www.phperz.com/article/17/0914/348850.html