Android几种加载网络图片的方式(附带源码Demo)

本文介绍了在Android项目中常见的四种网络图片加载方式:普通HTTP加载、使用ImageLoader、Volley及xUtils框架。每种方法均有详细的实现步骤,并提供了源码下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在android项目中经常会接触到加载网络图片的情况,这里向大家展示几种最为常见访问网络图片的几种方式。

app显示情况





第三种使用开源框架volley

详细使用教程可以查看:volley使用教程点击打开链接


第四种也是使用开源框架xUtils

详细教程可以查看:xutils详细教程点击打开链接

xutils有个好处就是事先已经帮你做好了图片的缓存


源码地址:源码下载地址点击打开链接

/**
 * 用ImageLoader加载图片
 * @author mkosto
 *
 */
public class ImageLoaderPicture {
	
	private DisplayImageOptions options;

	public ImageLoaderPicture(Context context) {
		
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2)
		.denyCacheImageMultipleSizesInMemory()
		.discCacheFileNameGenerator(new Md5FileNameGenerator())
		.tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging() 
		.memoryCache(new WeakMemoryCache())									
		.build();
		ImageLoader.getInstance().init(config);
		
		options = new DisplayImageOptions.Builder()
		.showStubImage(0)
		.showImageForEmptyUri(0)
		.showImageOnFail(0)
		.cacheInMemory().cacheOnDisc()
		.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
		.bitmapConfig(android.graphics.Bitmap.Config.RGB_565)
		.build();
	}

	public DisplayImageOptions getOptions() {
		return options;
	}

	public void setOptions(DisplayImageOptions options) {
		this.options = options;
	}
	
	
}


/**
 * 普通加载网络方式
 * @author mkosto
 *
 */
public class NormalLoadPictrue {
	
	private String uri;
	private ImageView imageView;
	private byte[] picByte;
	
	
	public void getPicture(String uri,ImageView imageView){
		this.uri = uri;
		this.imageView = imageView;
		new Thread(runnable).start();
	}
	
	@SuppressLint("HandlerLeak")
	Handler handle = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if (msg.what == 1) {
				if (picByte != null) {
					Bitmap bitmap = BitmapFactory.decodeByteArray(picByte, 0, picByte.length);
					imageView.setImageBitmap(bitmap);
				}
			}
		}
	};

	Runnable runnable = new Runnable() {
		@Override
		public void run() {
			try {
				URL url = new URL(uri);
				HttpURLConnection conn = (HttpURLConnection)url.openConnection();
				conn.setRequestMethod("GET");
				conn.setReadTimeout(10000);
				
				if (conn.getResponseCode() == 200) {
					InputStream fis =  conn.getInputStream();
					ByteArrayOutputStream bos = new ByteArrayOutputStream();
					byte[] bytes = new byte[1024];
					int length = -1;
					while ((length = fis.read(bytes)) != -1) {
						bos.write(bytes, 0, length);
					}
					picByte = bos.toByteArray();
					bos.close();
					fis.close();
					
					Message message = new Message();
					message.what = 1;
					handle.sendMessage(message);
				}
				
				
			}catch (IOException e) {
				e.printStackTrace();
			}
		}
	};
	
}


/**
 * 用Volley加载图片
 * @author mkosto
 *
 */
public class VolleyLoadPicture {
	
	private ImageLoader mImageLoader = null;
	private BitmapCache mBitmapCache;
	
	private ImageListener one_listener;
	
	public VolleyLoadPicture(Context context,ImageView imageView){
		one_listener = ImageLoader.getImageListener(imageView, 0, 0);
		
		RequestQueue mRequestQueue = Volley.newRequestQueue(context);
		mBitmapCache = new BitmapCache();
		mImageLoader = new ImageLoader(mRequestQueue, mBitmapCache);
	}

	public ImageLoader getmImageLoader() {
		return mImageLoader;
	}

	public void setmImageLoader(ImageLoader mImageLoader) {
		this.mImageLoader = mImageLoader;
	}

	public ImageListener getOne_listener() {
		return one_listener;
	}

	public void setOne_listener(ImageListener one_listener) {
		this.one_listener = one_listener;
	}
	
	class BitmapCache implements ImageCache {
		private LruCache<String, Bitmap> mCache;
		private int sizeValue;
		
		public BitmapCache() {
			int maxSize = 10 * 1024 * 1024;
			mCache = new LruCache<String, Bitmap>(maxSize) {
				@Override
				protected int sizeOf(String key, Bitmap value) {
					sizeValue = value.getRowBytes() * value.getHeight();
					return sizeValue;
				}
				
			};
		}

		@Override
		public Bitmap getBitmap(String url) {
			return mCache.get(url);
		}

		@Override
		public void putBitmap(String url, Bitmap bitmap) {
			mCache.put(url, bitmap);
		}
	}
	

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值