`
doctoryangming
  • 浏览: 18854 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android获取网络图片的用法

阅读更多
关于android获取网络图片主要是吧网络图片的数据流读入到内存中然后用
Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);

方法来将图片流传化为bitmap类型 这样才能用到
imageView.setImageBitmap(bitMap);

来进行转化,这些大家都了解,主要的问题在获取bitmap时候居然为null  怎么回事呢?我开始的时候遇见这个问题,并且困扰了一段时间,最后发现错误了
下面是我的错误代码
     byte[] data = GetImageForNet.getImage(path);
     int length = data.length;
    
     Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);
     imageView.setImageBitmap(bitMap);

下面是 GetImageForNet.getImage()方法的代码清单
public static byte[] getImage(String path) throws Exception {
		URL url = new URL(path);
		HttpURLConnection httpURLconnection =  (HttpURLConnection)url.openConnection();
		httpURLconnection.setRequestMethod("GET");
		httpURLconnection.setReadTimeout(6*1000);
		InputStream in = null;
		byte[] b = new byte[1024];
		int len = -1;
		if (httpURLconnection.getResponseCode() == 200) {
			 in = httpURLconnection.getInputStream();
			 in.read(b);
                         in.close();
                         return b;
                         
			 
		}
		return null;
	}

看起来没有问题 获取网络图片输入流,填充二进制数组,返回二进制数组,然后使用 Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length); data就是返回的二进制数组
获取bitMap  看起来没有问题,可是bitMap就是为null!汗!最后慢慢整理思路,排除法去查找出现异常的地方,最后发现可能BitmapFactory.decodeByteArray方法中所需要的data不一定是传统意义上的字节数组,查看android api,最后发现BitmapFactory.decodeByteArray所需要的data字节数组并不是想象中的数组!而是把输入流传化为字节内存输出流的字节数组格式,找到原因后改进一下,成功!附上成功后的代码
  try {
				    byte[] data = GetImageForNet.getImage(path);
				    String d = new String(data);
				   // File file = new File("1.jpg");
				    //OutputStream out = new FileOutputStream(file);
				    //out.write(data);
				    //out.close();
				    int length = data.length;
				    Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);
				    imageView.setImageBitmap(bitMap);
				    //imageView.seti
				} catch (Exception e) {
					Log.i(TAG, e.toString());
					Toast.makeText(DataActivity.this, "获取图片失败", 1).show();
				}

下面是改进后的 GetImageForNet.getImage()方法的代码清单
public static byte[] getImage(String path) throws Exception {
		URL url = new URL(path);
		HttpURLConnection httpURLconnection =  (HttpURLConnection)url.openConnection();
		httpURLconnection.setRequestMethod("GET");
		httpURLconnection.setReadTimeout(6*1000);
		InputStream in = null;
		byte[] b = new byte[1024];
		int len = -1;
		if (httpURLconnection.getResponseCode() == 200) {
			 in = httpURLconnection.getInputStream();
			 byte[] result = readStream(in);
			 in.close();
			 return result;
			 
		}
		return null;
	}
	
	public static byte[] readStream(InputStream in) throws Exception{
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = -1;
		while((len = in.read(buffer)) != -1) {
			outputStream.write(buffer, 0, len);
		}
		outputStream.close();
		in.close();
		return outputStream.toByteArray();
	}
分享到:
评论
1 楼 蜗牛/ 2011-09-21  
楼主我现在遇到这样一个问题,这里有一张图片的byte数组,改如何转为Bitmap.通过BitmapFactory.decodeByteArray(data, 0, length);同样返回NULL

相关推荐

    android安卓通过url获取网络图片并显示在imageview中

    通过图片的url获取到图片,并显示到imageview中,本实例中选择的图片的百度官网的logo。仅提供一种获取网络图片的方法。

    Android中Glide获取图片Path、Bitmap用法详解

    软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...

    android 网络获取图片

    网络获取图片—httpurlconnection和bitmapfactroy的学习。以及weight的用法主要有3种

    listview获取网络图片缓存优化

    listview获取网络图片缓存优化

    Android 从网络上获取天气XML文档的方法.rar

    本源码中,你将会了解到从网络上获取图片数据的方法、获取天气XML文档的方法、翻译风速字符串的方法、翻译当前风向字符串的方法、翻译天气情况字符串的方法、获取选中城市的汉语拼音、切换到天气明细View、设置当前...

    Android使用线程获取网络图片的方法

    本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下 AndroidManifest.xml  <?xml version=1.0 encoding=utf-8?> <manifest xmlns:android=...

    Android获取网络图片并显示的方法

    本文实例为大家分享了Android获取网络图片并显示的具体代码,供大家参考,具体内容如下 使用 HttpURLConnection 获得连接,再使用 InputStream 获得图片的数据流,通过 BitmapFactory 将数据流转换为 Bitmap,再将 ...

    Android 使用Glide加载网络图片等比例缩放的实现方法

    主要介绍了Android 使用Glide加载网络图片等比例缩放的实现方法,需要的朋友可以参考下

    Android代码-图片缓存的一种方法

    在移动应用中,我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存...

    Android课程设计,Kotlin实现网络图片下载应用

    根据Android多线程和网络编程的知识讲解和案例使用,使用Handler消息机制实现网络图片下载,并且保存到模拟器中,强化对Android多线程编程、网络编程和文件读写的理解。要求: 1. 巩固Android Studio的常规用法; 2....

    Android编程获取图片数据的方法详解

    本文实例讲述了Android编程获取图片数据的方法。分享给大家供大家参考,具体如下: 网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?Android手机和浏览器也是一样的,也可以通过网络...

    Android 网络图片查看显示的实现方法

    我们的应用或多或少都会从网络获取图片数据然后进行显示,下面就将实现一个这样的例子,获取网络中的图片! 首先:我们来看一下效果图 界面中有三个控件,一个EditText,一个Button,一个ImageView 1、下面是具体...

    异步加载网络图片

    加载图片时先查看缓存中时候存在该图片 如果存在则返回该图片 否则先加载载一个默认的占位图片 同时创建一个通过网络获取图片的任务并添加 任务完成后放松消息给主线程更新界面 使用方法: AsynImageLoader ...

    Android编程简单获取网络上的图片

    本文实例讲述了Android编程简单获取网络上的图片的方法。分享给大家供大家参考,具体如下: 要获取网络上的图片,首先得有网络的访问权限,这个不再写了,以前的文章中写过,还有布局方式不再写了,就是写也是一个...

    Android实现TextView显示HTML加图片的方法

    TextView显示网络图片,我用android2.3的系统,可以显示图片出来,并且如果图片比较大,应用会卡的现象,肯定是因为使用主线程去获取网络图片造成的,但如果我用android4.0以上的系统运行,则不能显示图片,只显示小...

    Android图片框架Glide-3.7.0(最新,很强大)

    如果想有更多的控制,还可以使用Glide.with(context).load(“图片路径“).asBitmap()方法加载静态图片,使用Glide.with(context).load(“图片路径“).asGif()方法加载动画图片 本地视频剧照的解码: 通过调用Glide....

    Android下ImageView的用法

    描述了Android平台下ImageView的用法,包括了图片的旋转,以及从网络获取图片。具体可以参见博客:http://www.cnblogs.com/plokmju/p/3210480.html

    YnetImg.java,安卓网络异步获取图片,存放本地,加载到imageview不会OOM

    安卓网络异步获取图片,存放本地,加载到imageview不会OOM 使用方法如下: //高清4K String url="http://attach.bbs.miui.com/forum/201502/03/150905vpzrbnzksnkbkyhr.jpg"; YnetImg yset=new YnetImg...

    Android实现ListView异步加载图片

    Android实现ListView异步加载图片,ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好

Global site tag (gtag.js) - Google Analytics