安卓案例:利用URLConnection下载网页
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓案例:利用URLConnection下载网页相关的知识,希望对你有一定的参考价值。
文章目录
一、安卓网络编程
二、运行效果
- 输入百度网址,下载网页内容
三、涉及知识点
- 线性布局(LinearLayout)
- 标签(TextView·)
- 文本编辑框(EditText)
- 按钮(Button)
- 网址连接类(URLConnection)
- 异步任务(AsyncTask)
四、实现步骤
(一)创建安卓应用
- 基于Empty Activity创建安卓应用 -
DownloadWebPageByURLConnection
(二)准备图片素材
- 将背景图片拷贝到
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:orientation="vertical"
android:padding="20dp">
<EditText
android:id="@+id/edtUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/input_url"
android:lines="2"
android:textSize="20sp" />
<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" />
<ScrollView
android:id="@+id/svContent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
android:textSize="18sp" />
</ScrollView>
</LinearLayout>
(四)字符串资源文件
- 字符串资源文件 -
strings.xml
<resources>
<string name="app_name">利用URLConnection下载网页</string>
<string name="input_url">请输入网址(以http或https打头)</string>
<string name="download">下载</string>
<string name="clear">清空</string>
</resources>
(五)授权访问因特网
- 在安卓项目清单文件里授权访问因特网
(六)在主界面里实现功能
- 主界面 -
MainActivity
1、声明变量,获取控件实例
- 声明两个控件变量,然后获取控件实例
2、创建下载资源的异步任务类
- 在MainActivity里继承
AsyncTask
创建DownloadTask
类
/**
* 下载资源的异步任务
*/
private class DownloadTask extends AsyncTask<String, Double, String>
private static final String TAG = "download_webpage";
// 异步任务执行前要执行的操作
@Override
protected void onPreExecute()
super.onPreExecute();
Log.d(TAG, "开始下载网页……");
// 后台进行的耗时操作
@Override
protected String doInBackground(String... params)
// 获取网址字符串
String strUrl = params[0]; // 执行异步任务时传入的第一个参数
// 定义网页内容
String content = "";
try
// 基于网址字符串创建URL对象
URL url = new URL(strUrl);
// 获取URL连接对象
URLConnection conn = url.openConnection();
// 获取字节输入流(进水管)
InputStream is = conn.getInputStream();
// 将字节流转换成字符输入流
InputStreamReader isr = new InputStreamReader(is);
// 将字符串输入流包装成缓冲字符输入流
BufferedReader br = new BufferedReader(isr);
// 定义文本行字符串
String nextLine = "";
// 定义字符串生成器
StringBuilder builder = new StringBuilder();
// 行读取整个缓冲字符输入流
while ((nextLine = br.readLine()) != null)
// 将每一行内容添加到字符串生成器
builder.append(nextLine);
// 发布异步任务执行的进度
publishProgress((double) builder.toString().length());
// 获取网页内容
content = builder.toString();
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
// 返回网页内容
return content;
// 异步任务执行后要执行的操作
@Override
protected void onPostExecute(String result)
super.onPostExecute(result);
// 判断网页读取是否成功
if (!result.equals(""))
// 通过标签显示网页内容
tvContent.setText(result);
else
// 通过吐司提示用户网页读取失败
Toast.makeText(MainActivity.this, "遗憾,网页读取失败!", Toast.LENGTH_LONG).show();
// 更新异步任务执行的进度
@Override
protected void onProgressUpdate(Double... values)
super.onProgressUpdate(values);
// 在日志里输出下载进度
Log.d(TAG, "已读取" + values[0] + "个字符~");
3、编写下载按钮单击事件处理方法
- 编写
doDownload(View view)
方法
/**
* 下载按钮单击事件处理方法
*
* @param view
*/
public void doDownload(View view)
// 获取网址字符串
String strUrl = edtUrl.getText().toString().trim();
// 创建下载任务对象
DownloadTask task = new DownloadTask();
// 执行下载任务,传入网址作为参数
task.execute(strUrl);
4、编写清空按钮单击事件处理方法
- 编写
doClear(View view)
方法
/**
* 清空按钮单击事件处理方法
*
* @param view
*/
public void doClear(View view)
// 清空网址编辑框
edtUrl.setText("");
// 清空网页内容标签
tvContent.setText("");
// 让网址编辑框获取焦点
edtUrl.requestFocus();
(七)运行程序,查看结果
- 输入百度网址,下载网页内容
- 在
LogCat
里查看日志信息
五、利用requests库爬取网页
(一)安装requests库
- 在终端执行命令:
pip install requests
(二)爬取网页
- 编写Python程序 -
爬取网页.py
- 请求网页,打印响应对象(200表明请求成功)
- Response对象封装了我们请求的网页数据,如何得到网页数据呢?
- 查看响应对象的
content
属性
- 大家可以看到,网页里的汉字没有正常显示,显示的是unicode,那么该如何操作才能看到网页里的汉字呢?
- 查看响应对象的
text
属性
- 网页里的汉字显示乱码,需要处理一下,才能正常显示汉字
以上是关于安卓案例:利用URLConnection下载网页的主要内容,如果未能解决你的问题,请参考以下文章