安卓案例:利用URLConnection下载图片
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓案例:利用URLConnection下载图片相关的知识,希望对你有一定的参考价值。
文章目录
一、安卓网络编程
二、运行效果
- 输入图片网址,下载并显示图片
三、涉及知识点
- 线性布局(LinearLayout)
- 图像视图(ImageView·)
- 文本编辑框(EditText)
- 按钮(Button)
- 网址连接类(URLConnection)
- 异步任务(AsyncTask)
四、实现步骤
(一)创建安卓应用
- 基于Empty Activity创建安卓应用 -
DownloadImagePageByURLConnection
(二)准备图片素材
- 将背景图片拷贝到
mipmap-xhdpi
目录
(三)主布局资源文件
- 主布局资源文件 -
main_activity.xml
<?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:background="@mipmap/background"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp">
<EditText
android:id="@+id/edtImageUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/input_image_url"
android:lines="3" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btnDownload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:onClick="doDownload"
android:text="@string/download"
android:textSize="20sp" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="doClear"
android:text="@string/clear"
android:textSize="20sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#bbbbbb" />
<ProgressBar
android:id="@+id/pbDownloadImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
<ImageView
android:id="@+id/ivImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY" />
</LinearLayout>
(四)字符串资源文件
- 字符串资源文件 -
strings.xml
<resources>
<string name="app_name">利用URLConnection下载图片</string>
<string name="input_image_url">输入图片网址</string>
<string name="download">下载</string>
<string name="clear">清空</string>
</resources>
(五)授权访问因特网
- 在安卓项目清单文件里授权访问因特网
(六)在主界面里实现功能
- 主界面 -
MainActivity
1、声明变量,获取控件实例
- 声明三个控件变量,然后获取控件实例
2、创建下载资源的异步任务类
- 在MainActivity里继承
AsyncTask
创建DownloadTask
类
/**
* 下载资源的异步任务
*/
private class DownloadTask extends AsyncTask<String, Void, Bitmap>
// 异步任务执行前要执行的操作
@Override
protected void onPreExecute()
super.onPreExecute();
// 让进度条可见
pbDownloadImage.setSystemUiVisibility(View.VISIBLE);
// 后台进行的耗时操作
@Override
protected Bitmap doInBackground(String... params)
// 获取图片网址字符串
String strImageUrl = params[0];
// 定义位图对象
Bitmap bitmap = null;
try
// 定义URL对象
URL url = new URL(strImageUrl);
// 定义URL连接对象
URLConnection connection = url.openConnection();
// 获取字节输入流
InputStream is = connection.getInputStream();
// 解析字节输入流获取位图对象
bitmap = BitmapFactory.decodeStream(is);
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
// 返回位图对象
return bitmap;
// 异步任务执行后要执行的操作
@Override
protected void onPostExecute(Bitmap bitmap)
super.onPostExecute(bitmap);
// 让进度条消失
pbDownloadImage.setVisibility(View.GONE);
// 通过图像控件显示位图
ivImage.setImageBitmap(bitmap);
3、编写下载按钮单击事件处理方法
- 编写
doDownload(View view)
方法
/**
* 下载按钮单击事件处理方法
*
* @param view
*/
public void doDownload(View view)
// 获取图片网址字符串
String strImageUrl = edtImageUrl.getText().toString().trim();
// 创建下载任务
DownloadTask task = new DownloadTask();
// 执行下载任务,传入图片网址
task.execute(strImageUrl);
4、编写清空按钮单击事件处理方法
- 编写
doClear(View view)
方法
/**
* 清空按钮单击事件处理方法
*
* @param view
*/
public void doClear(View view)
// 清空图片网址编辑框
edtImageUrl.setText("");
// 清空图像控件
ivImage.setImageBitmap(null);
// 让图片网址编辑框获取焦点
edtImageUrl.requestFocus();
(七)查看要下载的网络图片
(八)运行程序,查看结果
- 输入图片网址,下载并显示图片
(九)下载并显示Tomcat服务器上的图片
1、在服务器上准备图片
- 在Tomcat主目录的webapps目录里创建
images
,在里面放一张图片winter.jpg
2、启动Tomcat服务器
- 找到
startup.bat
批处理文件
- 双击
startup.bat
批处理文件图标,启动服务
3、在浏览器里访问服务器上的图片
- 访问
http://localhost:8080/images/winter.png
- 查看本机IP地址 -
192.168.129.112
- 访问
http://192.168.129.112:8080/images/winter.png
4、安卓应用里下载并显示本机服务器上的图片
- 注意:图片网址只能用IP地址 -
http://192.168.129.112:8080/images/winter.png
,不能用http://localhost:8080/images/winter.png
,因为在安卓模拟器上运行安卓应用,localhost指的不是本地的Tomcat服务器,而是安卓模拟器。
五、爬取单张图片
(一)目标所在页面
- https://pic.netbian.com/tupian/29800.html
- 查看网页源码,确定爬取目标
(二)编写程序,爬取图片
- 编写Python程序 -
爬取单张图片.py
"""
功能:爬取单张图片
作者:华卫
日期:2022年7月19日
"""
# 1. 导入所需库
import requests
from lxml import etree
# 2. 定义网页地址
url = 'https://pic.netbian.com/tupian/29800.html'
# 3. 定义headers
headers =
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
# 4. 模拟发送请求,获取网页内容
response = requests.get(url, headers)
content = response.content.decode('gbk')
# 5. 规则提取数据
html = etree.HTML(content)
# //:表示全程搜索,[@属性=属性值]:表示按属性值过滤
a_res = html.xpath("//a[@id='img']")[0]
img_res = a_res.xpath("./img")[0]
img_url = img_res.xpath("./@src")[0]
img_title = img_res.xpath("./@title")[0]
# 6. 下载爬取的图片并保存到本地
filename = '%s.jpg' % img_title
with open('image/' + filename, 'wb') as f:
img = requests.get('https://pic.netbian.com' + img_url, headers).content
f.write(img)
print('图片[]下载并保存成功~'.format(filename))
(三)运行程序,查看结果
- 查看控制台输出信息
- 查看下载到本地的图片
以上是关于安卓案例:利用URLConnection下载图片的主要内容,如果未能解决你的问题,请参考以下文章