关于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();
}
分享到:
相关推荐
通过图片的url获取到图片,并显示到imageview中,本实例中选择的图片的百度官网的logo。仅提供一种获取网络图片的方法。
软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...
网络获取图片—httpurlconnection和bitmapfactroy的学习。以及weight的用法主要有3种
listview获取网络图片缓存优化
本源码中,你将会了解到从网络上获取图片数据的方法、获取天气XML文档的方法、翻译风速字符串的方法、翻译当前风向字符串的方法、翻译天气情况字符串的方法、获取选中城市的汉语拼音、切换到天气明细View、设置当前...
本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下 AndroidManifest.xml <?xml version=1.0 encoding=utf-8?> <manifest xmlns:android=...
本文实例为大家分享了Android获取网络图片并显示的具体代码,供大家参考,具体内容如下 使用 HttpURLConnection 获得连接,再使用 InputStream 获得图片的数据流,通过 BitmapFactory 将数据流转换为 Bitmap,再将 ...
主要介绍了Android 使用Glide加载网络图片等比例缩放的实现方法,需要的朋友可以参考下
在移动应用中,我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存...
根据Android多线程和网络编程的知识讲解和案例使用,使用Handler消息机制实现网络图片下载,并且保存到模拟器中,强化对Android多线程编程、网络编程和文件读写的理解。要求: 1. 巩固Android Studio的常规用法; 2....
本文实例讲述了Android编程获取图片数据的方法。分享给大家供大家参考,具体如下: 网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?Android手机和浏览器也是一样的,也可以通过网络...
我们的应用或多或少都会从网络获取图片数据然后进行显示,下面就将实现一个这样的例子,获取网络中的图片! 首先:我们来看一下效果图 界面中有三个控件,一个EditText,一个Button,一个ImageView 1、下面是具体...
加载图片时先查看缓存中时候存在该图片 如果存在则返回该图片 否则先加载载一个默认的占位图片 同时创建一个通过网络获取图片的任务并添加 任务完成后放松消息给主线程更新界面 使用方法: AsynImageLoader ...
本文实例讲述了Android编程简单获取网络上的图片的方法。分享给大家供大家参考,具体如下: 要获取网络上的图片,首先得有网络的访问权限,这个不再写了,以前的文章中写过,还有布局方式不再写了,就是写也是一个...
TextView显示网络图片,我用android2.3的系统,可以显示图片出来,并且如果图片比较大,应用会卡的现象,肯定是因为使用主线程去获取网络图片造成的,但如果我用android4.0以上的系统运行,则不能显示图片,只显示小...
如果想有更多的控制,还可以使用Glide.with(context).load(“图片路径“).asBitmap()方法加载静态图片,使用Glide.with(context).load(“图片路径“).asGif()方法加载动画图片 本地视频剧照的解码: 通过调用Glide....
描述了Android平台下ImageView的用法,包括了图片的旋转,以及从网络获取图片。具体可以参见博客:http://www.cnblogs.com/plokmju/p/3210480.html
安卓网络异步获取图片,存放本地,加载到imageview不会OOM 使用方法如下: //高清4K String url="http://attach.bbs.miui.com/forum/201502/03/150905vpzrbnzksnkbkyhr.jpg"; YnetImg yset=new YnetImg...
Android实现ListView异步加载图片,ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好