网页源码查看器

[TOC]
输入网址,那可查看目标网页的HTML源码

1. 写布局

线性 + EditText + Button + TextView
这里写图片描述

2. 写业务逻辑

  1. 找控件
  2. 设置按钮点击事件
  3. 当用户点击按钮时,获取用户输入的url
  4. 我们通过URLConnection请求网络,获取服务器返回的流信息
  5. 我们将流转换成字符串
  6. 将源码字符串展示到textview上

示例代码

HttpUrlConnection连接示例

//连网的耗时操作需要启动子线程,并添加INTERNET权限
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            URL url = new URL(url_str);
            HttpURLConnection openConnection = (HttpURLConnection) url.openConnection();
            openConnection.setRequestMethod("GET");
            openConnection.setConnectTimeout(10 * 1000);

            int code = openConnection.getResponseCode();
            if(code == 200) {
            //返回的状态码为200,表示请求成功,获取连接的输出流,接收服务器的返回数据
                InputStream is = openConnection.getInputStream();
                //处理返回数据的实现代码
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}).start();

流转字符串模块代码

public static String streamToString(InputStream inputStream) {
    try {
        //将数据写入到内存中,再将字节数组转成字符串
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = inputStream.read(buf)) > 0) {
            bos.write(buf, 0, len);
        }
        String result = bos.toString();
    //  bos.close();//可关可不关,无效
        inputStream.close();
        return result;
    } catch (IOException e) {
        e.printStackTrace();
    } 
    return null;
}

网络编程的注意事项:

  1. 权限问题;
    <uses-permission android:name="android.permission.INTERNET"/>
    异常:java.net.SocketException: Permission denied

  2. 手机访问自己电脑的url时,需要指定ip地址,不要用localhost;

  3. 编码问题: android设备的默认编码是utf-8; 静态web资源,或动态web资源也需要是utf-8

  4. ANR异常 , anr: application not response; 由于主线程被阻塞就会报这个错误.
    ANR in com.itheima.looksource (com.itheima.looksource/.MainActivity)

  5. 网络在主线程异常 由于网络请求是耗时的操作,容易导致主线程阻塞从而导致ANR;所以谷歌从android4.0以后强制要求网络请求必须方法子线程,如果放到主线程就报该错。
    android.os.NetworkOnMainThreadException

  6. CalledFromWrongThreadException,从错误的线程调用异常; 谷歌规定:只有主线程(mian, 原始的线程,UI线程)才能够更新UI(更改控件的属性或值);子线程不能够更新UI;
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

  7. 注意: 耗时的操作必须放到子线程中执行,网络请求就属于耗时的操作; 我们将网络请求放到子线程中了,获取到了数据,我们想更新UI,但是谷歌又告诉更新UI,不能放到子线程中,只能放到主线程中;所以我们产生了矛盾; 采用Handler解决;

源码下载

http://download.csdn.net/detail/jianbiao426/9553541

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值