Android通过请求网络获取图片资源

在日常的编写Android软件的过程中,避免不了使用网络请求,也不可能使用单机的Android,所以本次讲的是通过Android发送网络请求请求图片的文章。

我先来总结一下网络请求的几个步骤:

  1、将想要请求的图片地址转换成URL类

  2、通过openConnection来建立连接

  3、在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间

  4、设置请求网络的类型(GET或者POST)

  5、提交网络请求

  6、接受返回码,通过返回码判断网络是否请求成功

注意:这里非常重要,任何网络请求必须加上网络权限 <uses-permission android:name="android.permission.INTERNET"/>

这些是在网络请求中最基本的几个步骤,在我们写的请求网络图片的代码中,还有其余的代码需要补充。

我们代码一步一步的来:

  //将想要请求的图片地址转换成URL类   这个图片的地址有点长

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #3933ff }
span.s1 { color: #000000 }
span.s2 { color: #931a68 }

  URL url = new URL("https://timgsa.baidu.com/timg?                image&quality=80&size=b9999_10000&sec=1524759026299&di=47e39d74fe559c7ab60318fb308ab8fa&imgtype=0&src=http%3A%2F%2Fimgstore.cdn.sogou.com%2Fapp%2Fa%2F100540002%2F691448.jpg");

  //通过openConnection来建立连接   这里的HttpURLConnection是openConnection的返回类型

  HttpURLConnection connection = (HttpURLConnection) url.openConnection();

  //在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间

  //设置连接超时为5秒

connection.setConnectTimeout(5000);

//设置读取超时为5秒

connection.setReadTimeout(5000);

//设置请求网络的类型(GET或者POST)

  connection.setRequestMethod("GET");

  //提交网络请求

  connection.connect();

  //接受返回码  这里接受到的返回码是int类型的

  int code = connection.getResponseCode();

  //通过返回码判断网络是否请求成功

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #4e9072 }
span.s1 { color: #931a68 }
span.s2 { color: #000000 }
span.s3 { color: #0326cc }
span.Apple-tab-span { white-space: pre }

  if(code == 200){

  //获取连接返回的数据流

  InputStream is = connection.getInputStream();

  //因为返回的是个图片所以通过位图的方式获取

  Bitmap bm = BitmapFactory.decodeStream(is);

  //设置消息

  Message message = new Message();

  message.what = 0;

  message.obj = bm;

  //通过handler发送消息

handler.sendMessage(message);

}

  

在Android中执行耗时操作必须在子线程中执行,所以这里我们需要一个Handler来在主线程中设置ImageView的图片

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
span.s1 { color: #0326cc }
span.s2 { color: #931a68 }
span.s3 { text-decoration: underline }
span.Apple-tab-span { white-space: pre }

Handler handler =new Handler(){

public void handleMessage(Message msg) {

  switch (msg.what) {

        //如果msg.what是0 那么保存图片显示到ImageView中

      case 0:

          //在上面我们发送请求的时候把接受到的图片放到了message中,所以我们这里需要判断是否是相应的数值

          //才确定是否接受这个图片

        Bitmap bm = (Bitmap) msg.obj;

           //设置ImageView图片

        imageView.setImageBitmap(bm);

      break;

    }

};

};

如果说我们的按钮执行请求图片的时,必须在子线程中执行,否则报错;

btnButton这个是按钮

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; min-height: 21.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #777777 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #4e9072 }
span.s1 { color: #0326cc }
span.s2 { color: #931a68 }
span.s3 { color: #000000 }
span.s4 { color: #91afcb }
span.s5 { color: #4e9072 }
span.Apple-tab-span { white-space: pre }

btnButton.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View arg0) {
    //创建子线程
    new Thread(){
      @Override
      public void run() {
        // TODO Auto-generated method stub
        //获取图片
        getPic();
      }
    }.start();
  }
});

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #4e9072 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
span.s1 { color: #000000 }
span.Apple-tab-span { white-space: pre }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
span.s1 { color: #3933ff }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco }
span.s1 { color: #931a68 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #3933ff }
span.s1 { color: #009193 }
span.s2 { color: #4e9192 }
span.s3 { color: #000000 }
span.s4 { color: #932192 }

原文地址:https://www.cnblogs.com/mCarrYoung/p/8955489.html

时间: 2024-10-09 03:04:05

Android通过请求网络获取图片资源的相关文章

Android LazyList 从网络获取图片并缓存

原文地址   本文内容 环境 演示 LazyList 从网络获取图片并缓存 参考资料 本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中.该演示具备将缩略图缓存到手机外存的功能,所以叫"Lazy",这样就不用每次都通过网络重新获取. 该演示仅仅是获得缩略图,但在另一篇文章中,作者根据这个 LazyList,做了一个相对完整的演示(包括歌曲名称.歌手名.时长.缩略图等信息),如图 3 所示. 环境 Windows 2008 R2 64 位

Android ListView从网络获取图片及文字显示

从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析,最后显示在ListView上.具体步骤: 客户端发出请求,获取xml 客户端异步解析xml ListView将解析完的数据显示 一.Android客户端 (1)xml布局文件         mainxml,就是一个ListView. [java] view plaincopy <?xml version="1.0" encoding="utf

Android开发请求网络方式详解

转载请注明出处:http://blog.csdn.net/allen315410/article/details/42643401 大家知道Google支持和发布的Android移动操作系统,主要是为了使其迅速占领移动互联网的市场份额,所谓移动互联网当然也是互联网了,凡是涉及互联网的任何软件任何程序都少不了联网模块的开发,诚然Android联网开发也是我们开发中至关重要的一部分,那么Android是怎么样进行联网操作的呢?这篇博客就简单的介绍一下Android常用的联网方式,包括JDK支持的Ht

(转载)Android之三种网络请求解析数据(最佳案例)

[置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 小武:相信大家都用过网络请求解析数据,只是方法不一样而已,但是,逻辑都是差不多的: 一:AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个

Android ListView 和 Adapter 从本地/网络获取歌曲列表

本文内容 环境 项目结构 演示1:SimpleAdapter 演示2:BaseAdapter 演示3:customlazylist 演示4:customcompletelazylist 本文只给出演示概要,代码太多,贴出来意义不大,自己下载调试一下,点击此处下载. 本文通过四个示例,循序渐进地演示,将歌曲列表加载到 ListView 控件,歌曲列表,包括缩略图.歌手名.歌曲名等信息,或存放在本地,或以 JSON 形式存放在网络. 环境 Windows 2008 R2 64 位 Eclipse A

android中NetWorkReceive以及获取当前的网络连接状态详解

我们现在APP是断然很难离开网络存活下去,会有很多很频繁的网络操作,请求数据,传递数据等等,所以,我们需要对网络状态有多一点的了解. 首先,假如我们的APP在运行的时候,假如这时候用户掉线了,没有网络了,我们就应该给用户提示,然后用户连上网络了,我们这时候应该也给用户提示,这样他就可以继续玩我们的APP,我们应该怎么做了,没错,就是通过Receiver来实现,因为断网和联网系统都会发送广播,然后,我们可以收到,通过广播去判断当前的网络是否可用,具体代码如下:其中,接受广播需要的action是"a

Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Android

使用AFinal框架实现HTTP请求从网络获取手机号归属地

关于AFinal框架的介绍与使用,请点击左侧相关文章分类,进行了解,本篇文章不再进行赘述. 本篇文章主要是使用AFinal框架,实现一个简单的,从网络获取手机归属地的功能,给新手介绍如何使用这个框架,完成与服务器之间的交互. 首先,我们介绍一下我们需要用到的网络接口. http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx 上面这个网址是一个WebService的网站,主要功能是对外提供WebService服务. 我们主要使用下

android 请求网络异步加载

/** * 封装ProecssDialog对话框 * */ public class LoadDialog extends ProgressDialog { private String title = "进度对话框"; private String message = "加载数据中...."; public LoadDialog(Context context, int theme) { super(context, theme); } /** * 用默认的标题和