一起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请求中获取输入流。拿到输入流后就可以使用BitmapFactorydecodeStream(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二)

一起Talk Android吧(第三百九十六回:从本地存储中获取Bitmap二)

一起Talk Android吧(第三百九十四回:使用BitmapFactory.Options缩放Bitmap)