HttpURLConnection接口使用案例-图片下载
●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接口使用案例-图片下载相关推荐
- HttpClient的使用案例-图片下载
HttpClient 简介 HttpClient 是 Apache Jakarta common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H ...
- 阿里云 OCR 图片文字识别接口使用案例(java)
阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...
- Python—实训day4—爬虫案例3:贴吧图片下载
6 xpath 首先需要安装Google的Chrome浏览器 6.1 安装xpath插件 把 xpath_helper_2_0_2.crx 修改后缀名为 xpath_helper_2_0_2.rar. ...
- python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )
2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...
- scrapy框架案例:下载zcool网图片
下载图片文件 1, scrapy 框架下载文件(包括图片)有自己的一套解决方案,比我们使用 urlretrieve 更加优势 2. 避免重新下载最近已经下载的文件,指定过期时间,比如一天,一天以内就不 ...
- Python-高级:多任务-协程 案例:图片下载器
简单示例代码: # 描述:爬取网页中的图片, # 此处就给一些图片的连接,对图片下载. # 采用并发的方式 # 此处给好的图片链接分别为:import urllib.request import ge ...
- Jsoup爬虫案例-苏宁易购图片下载
Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...
- Android--网络图片下载的三级缓存策略
摘要:项目中做了一个关于在线壁纸的App,其中对于网络图片的处理是至关重要的,既要考虑性能,又要考虑图片所占用内存的限制.因此这里就把网络图片下载部分的代码整理处来,这里主要介绍图片三级缓存的策略. ...
- 轻松搞定阿里OSS文件上传和图片下载
轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备 1.1 注册阿里云账号,并开通OSS存储服务 1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...
最新文章
- 听说,英特尔要对外开放 x86 授权?
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]
- mfc 中获得本身程序句柄的代码
- 软件开发提效哪有那么容易,都是坑啊~
- 《leetcode》spiral-matrix-ii(构造螺旋矩阵)
- MPI Maelstrom——Dijkstra
- python画图模块_学习python画图模块plotnine:第一步安装
- python之提升程序性能的解决方案
- 计算机软件在哪里建文本文档,电脑点击右键的新建文本文档不见了的解决方法 怎么解决电脑点击右键的新建文本文档不见了...
- 点到直线的距离直线的交点及夹角
- solidworks图纸模板添加_Solidworks工程图 #07 如何在工程图模板中添加自定义属性链接...
- ATX电源接口, 服务器插拔电源接口
- 基于SSM的教师本科教学质量评价管理系统
- 如何提高服务器硬盘读写速度,如何加速硬盘读写速度,如何完全控制ntfs 分区...
- c++字符串中元音字母转置
- Windows10玩转Linux子系统(WSL)
- 总体设计和数据库设计
- csapp家庭作业第十章
- 软考系统架构设计师考试论文应试技巧
- JAVASE高级部分
热门文章
- Unity Ulua基础
- Linux 学习数据专题【管理、编程、源码分析】——Linux相关图书选购指南
- [人脸对齐] SAN:Style Aggregated Network for Facial Landmark Detection 论文阅读
- 盘点2021Android框架百大排行榜 附:《Android百大框架源码解析》
- Eclipse导入epf文件,一键更改背景及代码颜色。
- 计算机三级数据库填空题,计算机三级数据库填空练习题
- 使用C#编写一个计时器(OK)
- PHP Framework 数据库框架 Medoo 2.1:使用 Medoo 连接MYSQL数据库
- 联想电脑Z460安装Win7
- basemap生成地图散点图