●HttpURLConnection 简介

在 Android 开发中,应用程序经常需要与服务器进行数据交互,包括访问本地服务器以及远程服务器,这些都可以称为访问网络,此时就可以使用 HttpURLConnection 对象。它是一个标准的 Java 类。

HttpURLConnection 继承自 URLConnection 类,两者都是抽象类,其对象主要通过 URL 的 openConnection 方法获得。

openConnection 方法只创建 URLConnection 或者 HttpURLConnection 实例,但并不进行真正的连接操作,并且每次 openConnection 都将创建一个新的实例。因此在连接之前可以对它的一些属性进行设置。

设置超时时间以及设置请求方式的具体代码如下所示:

//设置请求方式

http.setRequestMethod("GET");

//设置超时时间

http.setConnectionTimeout(4000);

需要注意的是,在连接时需要设置超时时间,如果不设置超时时间,在网络异常的情况下,会导致取不到数据而一直等待,以至于程序不往下执行。

在开发 Android 应用程序的过程中,如果应用程序需要访问网络权限,则需要在清单文件中添加如下所示的代码:

< uses - permission android : name =" android . permission . INTERNET"/>

●通过一个输人网址查看图片的例子来讲解 HttpURLConnection 的使用过程。

1.创建新项目

修改 activity _ main . xml 布局界面的代码,整体采用线性垂直布局的方式,放置一个 ImageView 组件、一个 EditText 组件、一个 Button 组件,分别用来显示图片、输人网址、单击显示图片。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:id="@+id/address"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="http://m.imeitou.com/uploads/allimg/2016060813/lauy1mbqugw.jpg" /><Buttonandroid:id="@+id/get_show"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="获取显示图片" /><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</LinearLayout>

2.编写 MainActivity 代码

当界面创建完成以后,需要在 MainActivity 中编写与界面交互的代码。用于实现请求指定的网络图片,并将获取的图片显示在 Image View 组件上。具体的代码如下所示:

public class http extends AppCompatActivity {private ImageView imageView;private Button button;private EditText editText;
//定义获取到图片和失败的状态码protected static final int SUCCESS = 1;protected static final int ERROR = 2;
//创建消息处理器private Handler handler = new Handler(Looper.getMainLooper()) {public void handleMessage(android.os.Message msg) {if (msg.what == SUCCESS) {Bitmap bitmap = (Bitmap) msg.obj;imageView.setImageBitmap(bitmap);} else if (msg.what == ERROR) {Toast.makeText(http.this, "显示图片错误", Toast.LENGTH_SHORT).show();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.httplayout);init();}
//组件初始化private void init() {imageView = (ImageView) findViewById(R.id.imageView);button = (Button) findViewById(R.id.get_show);editText = (EditText)findViewById(R.id.address);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//获取输入的网络图片地址final String path = editText.getText().toString().trim();if (TextUtils.isEmpty(path)) {Toast.makeText(http.this, "图片路径不为空", Toast.LENGTH_SHORT).show();} else {
//使用子线程访问网络new Thread() {private HttpURLConnection conn;private Bitmap bitmap;public void run() {
//连接服务器get请求try {URL url = new URL(path);
//根据url发送http请求conn = (HttpURLConnection) url.openConnection();
//设置请求方式conn.setRequestMethod("GET");
//设置超时时间conn.setConnectTimeout(5000);
//设置请求头User-Agent浏览器的版本
//得到服务器返回的响应码int state = conn.getResponseCode();Log.v("1111111", state + "");if (state == 200) {
//请求网络成功。获取输入流InputStream in = conn.getInputStream();
//将流对象转换为Bitmap对象bitmap = BitmapFactory.decodeStream(in);
//告诉消息处理器显示图片Message msg = new Message();msg.what = SUCCESS;msg.obj = bitmap;handler.sendMessage(msg);} else {
//请求网络失败,提示用户Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}.start();}}});}
}

上述代码中的核心部分是先定义一个 URL 对象,然后通过 URL 对象去获取 HttpURLConnection 对象,接着设置了请求的方法、超时时间,最后获取到了服务器返回的输人流。

3.添加访问网络权限

由于访问网络图片需要请求网络,所以需要添加网络权限。

< uses-permission android:name="android.permission.INTERNET"/>

4.运行程序

为了方便,此处就提前在 EditText 中输人了网络图片的地址,图片地址为​​​​​​http://m.imeitou.com/uploads/allimg/2016060813/lauy1mbqugw.jpg,单击“获取并显示图片”按钮。使用HttpURLConnection的GET方法获取指定地址图片,成功地从服务器返回并显示出来。

HttpURLConnection接口使用案例-图片下载相关推荐

  1. HttpClient的使用案例-图片下载

    HttpClient 简介  HttpClient 是 Apache Jakarta common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H ...

  2. 阿里云 OCR 图片文字识别接口使用案例(java)

    阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...

  3. Python—实训day4—爬虫案例3:贴吧图片下载

    6 xpath 首先需要安装Google的Chrome浏览器 6.1 安装xpath插件 把 xpath_helper_2_0_2.crx 修改后缀名为 xpath_helper_2_0_2.rar. ...

  4. python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )

    2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...

  5. scrapy框架案例:下载zcool网图片

    下载图片文件 1, scrapy 框架下载文件(包括图片)有自己的一套解决方案,比我们使用 urlretrieve 更加优势 2. 避免重新下载最近已经下载的文件,指定过期时间,比如一天,一天以内就不 ...

  6. Python-高级:多任务-协程 案例:图片下载器

    简单示例代码: # 描述:爬取网页中的图片, # 此处就给一些图片的连接,对图片下载. # 采用并发的方式 # 此处给好的图片链接分别为:import urllib.request import ge ...

  7. Jsoup爬虫案例-苏宁易购图片下载

    Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...

  8. Android--网络图片下载的三级缓存策略

    摘要:项目中做了一个关于在线壁纸的App,其中对于网络图片的处理是至关重要的,既要考虑性能,又要考虑图片所占用内存的限制.因此这里就把网络图片下载部分的代码整理处来,这里主要介绍图片三级缓存的策略. ...

  9. 轻松搞定阿里OSS文件上传和图片下载

    轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备   1.1 注册阿里云账号,并开通OSS存储服务   1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...

最新文章

  1. 听说,英特尔要对外开放 x86 授权?
  2. VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]
  3. mfc 中获得本身程序句柄的代码
  4. 软件开发提效哪有那么容易,都是坑啊~
  5. 《leetcode》spiral-matrix-ii(构造螺旋矩阵)
  6. MPI Maelstrom——Dijkstra
  7. python画图模块_学习python画图模块plotnine:第一步安装
  8. python之提升程序性能的解决方案
  9. 计算机软件在哪里建文本文档,电脑点击右键的新建文本文档不见了的解决方法 怎么解决电脑点击右键的新建文本文档不见了...
  10. 点到直线的距离直线的交点及夹角
  11. solidworks图纸模板添加_Solidworks工程图 #07 如何在工程图模板中添加自定义属性链接...
  12. ATX电源接口, 服务器插拔电源接口
  13. 基于SSM的教师本科教学质量评价管理系统
  14. 如何提高服务器硬盘读写速度,如何加速硬盘读写速度,如何完全控制ntfs 分区...
  15. c++字符串中元音字母转置
  16. Windows10玩转Linux子系统(WSL)
  17. 总体设计和数据库设计
  18. csapp家庭作业第十章
  19. 软考系统架构设计师考试论文应试技巧
  20. JAVASE高级部分

热门文章

  1. Unity Ulua基础
  2. Linux 学习数据专题【管理、编程、源码分析】——Linux相关图书选购指南
  3. [人脸对齐] SAN:Style Aggregated Network for Facial Landmark Detection 论文阅读
  4. 盘点2021Android框架百大排行榜 附:《Android百大框架源码解析》
  5. Eclipse导入epf文件,一键更改背景及代码颜色。
  6. 计算机三级数据库填空题,计算机三级数据库填空练习题
  7. 使用C#编写一个计时器(OK)
  8. PHP Framework 数据库框架 Medoo 2.1:使用 Medoo 连接MYSQL数据库
  9. 联想电脑Z460安装Win7
  10. basemap生成地图散点图