访问一个网页的请求实际上就是一个GET请求,应用的布局没啥好说的,线性布局,定义好控件,在activity代码里面先获取到控件,获取到EditText控件的网络路径,开启get请求

开启一个新的线程,new Thread(){}.start()

获取Url对象,new出来,参数:path是String的url,内部类访问外部类的变量,应该顶一次final的

主线程中定义成员属性Handler对象,为了方便直接重写handleMessage()方法,回调过来的参数是Message对象,获取Message对象的what属性和obj属性,

New出Url之后,会有异常产生,捕获异常,

调用Url对象的openConnection()方法,得到HttpUrlConnection对象,这里需要强转

调用HttpUrlConnection对象的setRequestMethod()方法

调用HttpUrlConnection对象的setConnectTimeout()方法

调用HttpUrlConnection对象的setRequestProperty()方法

调用HttpUrlConnection对象的getResponseCode()方法,得到响应码,进行判断

调用HttpUrlConnection对象的getInputStream()方法,得到InputStream对象

把流的数据转换成文本,是一个非常常用的操作,新建一个包utils,放工具类

新建一个类StreamTools,里面定义一个静态方法readInputStream()

获取ByteArrayOutputStream对象,通过new一个字节数组输出流

定义一个int的len长度是0

定义一个byte[]的数组,通过new byte[1024]定义一个1024字节的数组

定义一个while循环,条件是调用InputStream对象的read(buffer)方法,参数:上面定义的byte[]数组,把数据读入到byte[]数组里面,返回一个读取的长度,如果长度等于-1那就是读到末尾了,因此这个进行循环判断

调用ByteArrayOutputStream对象的write(buffer,0,len)方法,读取字节数组,从0开始到len长度

循环完成之后,关闭输入流,调用ByteArrayOutputStream对象的toByteArray()得到一个字节数组,return出来用new String()包装一下

调用Handler对象的sendMessage()方法发送数据

当设置请求参数的时候,不能多加冒号,否则容易出错

package com.tsh.hrmlviewer;import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;import com.tsh.hrmlviewer.utils.StreamTools;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity {protected static final int SUCCESS = 1;protected static final int ERROR = 2;private EditText et_path;private TextView tv_show;// 消息处理器public Handler handler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case SUCCESS:String text = (String) msg.obj;tv_show.setText(text);break;case ERROR:Toast.makeText(MainActivity.this, "获取数据失败", 0).show();break;}};};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_path = (EditText) findViewById(R.id.et_path);tv_show = (TextView) findViewById(R.id.tv_show);}// 查看public void click(View v) {final String path = et_path.getText().toString().trim();if (TextUtils.isEmpty(path)) {Toast.makeText(this, "请输入网址", 0).show();} else {// 开启新线程new Thread() {public void run() {try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);int code = conn.getResponseCode();if (code == 200) {InputStream is = conn.getInputStream();String res = StreamTools.readInputStream(is);Message msg = new Message();msg.what = SUCCESS;msg.obj = res;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();}}}

工具类:

package com.tsh.hrmlviewer.utils;import java.io.ByteArrayOutputStream;
import java.io.InputStream;public class StreamTools {/*** 读取输入流* @param is* @return*/public static String readInputStream(InputStream is){ByteArrayOutputStream baos=new ByteArrayOutputStream();int len=0;byte[] buffer=new byte[1024];try {while((len=is.read(buffer))!=-1){baos.write(buffer,0,len);}is.close();byte[] res=baos.toByteArray();return new String(res);} catch (Exception e) {e.printStackTrace();}return null;}
}

转载于:https://www.cnblogs.com/taoshihan/p/5289742.html

[android] 网络html查看器相关推荐

  1. Android 网络HTML查看器

    本文实现一个基于Android的网络HTML查看器 新建项目,项目布局文件如下: <LinearLayout xmlns:android="http://schemas.android ...

  2. Android WIFI密码查看器实例(在获取Root权限下查看系统文件)

    Android WIFI密码查看器实例 实现原理:使用shell命令查看保存WIFI密码的系统文件 涉及的知识 界面展示 基本的Shell命令 shell查看WIFI密码 ShellUtil的使用 正 ...

  3. 利用360安全卫士的“网络连接查看器”获取网络游戏的服务器IP地址

    1.安装游戏客户端,并打开游戏客户端安装好的目录,确定游戏运行时的执行文件的文件名.<?xml:namespace prefix = o ns = "urn:schemas-micro ...

  4. Android Wifi密码查看器实现思路

    概述 最近出了一个wifi万能钥匙很火,但是用wifi万能钥匙连接上wifi我们是看不到密码,假如我想给平板连接,这是我们只能用手机3G网络建立热点然后让平板上的wifi万能钥匙进行连接,这样显然很麻 ...

  5. android网络音乐播放器

    ** 网络音乐播放器 ** 转载请指明博客网址 作者:WangYouHu我的主页网址 链接:https://www.jianshu.com/p/855659f266ae 著作权归作者所有,任何形式的转 ...

  6. 【实战】android网页源代码查看器

    点击查看源代码,可以查看该网页的源代码 一.文件结构 MainActivity.java: package com.example.viewpagesource;import java.io.Inpu ...

  7. android音乐播放器简书,打造 Android 网络音乐播放器 [2]

    前言 在上一篇中,我们把播放器的基本播放功能实现了,今天我们就把基本的界面实现以下吧. 目标 界面的话没打算实现太复杂的,就做现在比较流行的 Drawer+Tab+ViewPager 这种界面.下面给 ...

  8. 为 Android 编译 MuPDF 查看器

    先决条件 你需要一个 工作的 Android 开发环境,它由 Android SDK 和 Android NDK 组成.建立这一环境最简单的方式就是使用 Android Studio 下载并安装 SD ...

  9. android电池容量查看器,Android AccuBattery(电池损耗检测软件)V1.2.5 安卓专业版

    Android AccuBattery(电池损耗检测软件)是一款功能实用的提供安卓手机电池保持最佳状态而设计的电池管家软件.AccuBattery科学地维护电池健康,显示电池使用情况以及测量电池容量( ...

最新文章

  1. oracle无法登录em,oracle em登陆不了,账户密码过期
  2. asyncio之Coroutines,Tasks and Future
  3. javascript (function(){})()
  4. 游标式屏幕菜单c语言,【C语言】控制台窗口图形界面编程(六):光标设置
  5. 百度金融资深产品经理降峰:互金产品如何准确触达用户
  6. java数据结构-Vector
  7. Linux搭建oracle数据库
  8. 输电线路巡检机器人PPT_“高空大师”来了!架空输电线路智能巡检机器人在宁波投运...
  9. DefaultNetworkCredentials vs DefaultCredentials
  10. 编译OpenJDK12:a microsoft compiler is required
  11. SQL注入攻击原理及防御策略
  12. 关于起点中文网月票字体解密(附赠翻页获得月票)
  13. YYKit 源码学习使用 1
  14. 删除烦人的微软拼音输入法
  15. PostgreSQL 源码解读(152)- PG Tools#4(ReceiveXlogStream)
  16. oa项目经验描述_简历中项目经验模版
  17. B. Shifting Sort- Codeforces Round #744 (Div. 3)
  18. 三维空间图像轮廓 c语言,三维模型轮廓线抽取算法.doc
  19. iOS应用的内测签名、分发托管平台:蒲公英内测分发平台简介
  20. 【FreeRTOS】在Cortex-M4开发板上移植FreeRTOS并且实现LED灯闪烁(保姆级教程)

热门文章

  1. 怎样通过vb设置透视表多项选择_数据透视表有多强大?
  2. python keyboard模块_python3 安装 pykeyboard 模拟浏览器
  3. mfc怎么计算字符串宽度_Python基础之好玩的字符串格式化f-string格式
  4. 【Linux】安装CUDA和cudnn
  5. Python的生成器(generator)
  6. 【NLP】有三AI NLP知识星球来了,仅此一家别无分店
  7. 【杂谈】想成为机器学习学霸?先学会做笔记吧
  8. 有三AILab成立 | 寻找合适的你
  9. 深度学习的150多篇文章和10多个专栏推荐
  10. Lua 通过 alien 库调用 zlib 压缩/解压