一起Talk Android吧(第三百九十七回:从网络中获取Bitmap一)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百九十七回:从网络中获取Bitmap一)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们,大家好,上一回中咱们说的是"从本地存储中获取Bitmap"的例子,这一回中咱们介绍的例子是"从网络中获取Bitmap"。闲话休提,言归正转,让我们一起Talk android吧!
使用背景
在我们日常生活中大部分的App都可以联网,因此也会查看网络上的图片,需求来了:如何查看网络上的图片?我们的思路把图片下载到本地,然后再从本地存储中获取出Bimap并且显示到ImageView上。我们在前面章回中介绍过具体的使用方法,本章回中我们将介绍如何从网络中获取Bitmap文件,这样就可以直接把Bitmap显示到ImageView上,不再需要把图片下载到本地,既节省了时间又节省了空间。
使用方法
首先要建立网络连接,连接类型可以是TCP或者UDP,然后通过连接获取输入流,我们也可以不建立连接,而是直接发起HTTP请求,然后从Http请求中获取输入流。拿到输入流后就可以使用BitmapFactory
的decodeStream(inputStream)
方法从输入流中直接获取Bitmap文件。下面是示例代码,请大家参考:
//这是图片文件在模拟器中的存储路径,图片文件由模拟器中自带的相机拍摄而来。
String filePath = "/sdcard/Pictures/IMG_20221023_184223.jpg";
//确认图片文件是否存在,注意:模拟器重新启动后会自动删除Pictures目录下的文件
File file = new File(filePath);
if(!file.exists())
return;
//获取文件的输入流,可以通过文件获取,也可以直接使用文件的存储路径获取
FileInputStream inputStream = null;
try
// inputStream = new FileInputStream(filePath);
inputStream = new FileInputStream(file);
catch (FileNotFoundException e)
e.printStackTrace();
mBitmap = BitmapFactory.decodeStream(inputStream);
//mBitmap = BitmapFactory.decodeStream(inputStream,null,options);
//把Bitmap文件绑定到ImageView控件上显示出来
if(mBitmap == null)
mImageView.setImageBitmap(mBitmap);
在上面的代码中没有建立网络连接也没有发起HTTP请求,而是使用本地文件的输入流代替了网络中的输入流,这只是为了简化代码而做的处理,因为它们的效果相似。其实decodeFile
()的源代码中调用了decodeStream
()方法来获取Bitmap文件。此外,关于网络连接和内容可以点击这里查看以前博客中的内容。
注意事项
使用网络连接时需要获取网络操作的权限,涉及到流操作时需要处理异常,并且在操作完成后关闭流,上面的示例代码中就没有关闭流的操作。此外,代码中注释掉了一个重载方法的使用示例:
mBitmap = BitmapFactory.decodeStream(inputStream,null,options);
此方法中的第二个参数用来输出内容,一般不需要,因此将其设置为null,第三个参数是Options类型的对象,主要用来对图片做缩放,这个内容刚刚介绍过,因此不再赘述。
对比总结
从网络中获取Bitmap和从本地存储中获取Bitmap的方法类似,关键是获取到输入流,然后使用BitmapFactory
的decodeXXX方法来获取Bitmap,这些方法使用起来相似,如果觉得方法太多太混乱 ,可以使用decodeStream
()方法,它的参数是输入流,不管是本地存储中还是网络,拿到输入流后都可以使用此方法来获取Bitmap文件。
看官们,关于Android中"从网络中获取Bitmap"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百九十七回:从网络中获取Bitmap一)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百九十七回:自定义View实例三:可高亮显示的布局)
一起Talk Android吧(第三百九十三回:从drawable中获取Bitmap)
一起Talk Android吧(第三百九十五回:从本地存储中获取Bitmap一)
一起Talk Android吧(第三百九十八回:从网络中获取Bitmap二)