Android(java)学习笔记203:网页源码查看器

1.项目框架图:

2.首先是布局文件activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/et_path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="http://192.168.1.100:8080/hello.jsp" />

    <Button
        android:onClick="click"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="查看源码" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/tv_result"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </ScrollView>

</LinearLayout>

3.MainActivity.java:

 1 package com.itheima.netsourceviewer;
 2
 3 import java.io.InputStream;
 4 import java.net.HttpURLConnection;
 5 import java.net.URL;
 6
 7 import android.app.Activity;
 8 import android.os.Bundle;
 9 import android.os.Handler;
10 import android.os.Message;
11 import android.view.View;
12 import android.widget.EditText;
13 import android.widget.TextView;
14 import android.widget.Toast;
15
16 import com.itheima.netsourceviewer.utils.StreamTools;
17
18 public class MainActivity extends Activity {
19     protected static final int SUCCESS = 1;
20     protected static final int ERROR = 2;
21
22     private EditText et_path;
23     private TextView tv_result;
24
25     private Handler handler = new Handler(){
26         public void handleMessage(android.os.Message msg) {
27             switch (msg.what) {
28             case SUCCESS:
29                 String text = (String) msg.obj;
30                 tv_result.setText(text);
31                 break;
32             case ERROR:
33                 Toast.makeText(MainActivity.this, "请求失败", 1).show();
34                 break;
35             }
36         };
37     };
38
39     @Override
40     protected void onCreate(Bundle savedInstanceState) {
41         super.onCreate(savedInstanceState);
42         setContentView(R.layout.activity_main);
43         et_path = (EditText) findViewById(R.id.et_path);
44         tv_result = (TextView) findViewById(R.id.tv_result);
45     }
46     /**
47      * 查看源文件的点击事件
48      * @param view
49      */
50     public void click(View view){
51         final String path = et_path.getText().toString().trim();
52         //访问网络,把html源文件下载下来
53         new Thread(){
54             public void run() {
55                 try {
56                     //获取url对象
57                     URL url = new URL(path);
58                     //获取链接对象
59                     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
60                     //获取请求方式,默认GET
61                     conn.setRequestMethod("GET");//声明请求方式 默认get
62                     //告诉服务器我是什么样的客户端
63                     conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; U; Android 2.3.3; zh-cn; sdk Build/GRI34) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/6.0.0.57_r870003.501 NetType/internet");
64                     //获取状态吗
65                     int code = conn.getResponseCode();
66                     //判断状态吗
67                     if(code ==200){
68                         InputStream is = conn.getInputStream();
69                         //使用工具类, 吧字节输入流的数据编程字符串
70                         String result = StreamTools.readStream(is);
71
72                         Message msg = Message.obtain();//减少消息创建的数量
73                         msg.obj = result;
74                         msg.what = SUCCESS;
75                         handler.sendMessage(msg);
76                     }
77                 } catch (Exception e) {
78                     Message msg = Message.obtain();//减少消息创建的数量
79                     msg.what = ERROR;
80                     handler.sendMessage(msg);
81                     e.printStackTrace();
82                 }
83             };
84         }.start();
85     }
86 }

4.这里的工具类是StreamTools.java:

 1 package com.itheima.netsourceviewer.utils;
 2
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6
 7 /**
 8  * 流的工具类
 9  * @author Administrator
10  *
11  */
12 public class StreamTools {
13     /**
14      * 把输入流的内容转换成字符串
15      * @param is
16      * @return null解析失败, string读取成功
17      */
18     public static String readStream(InputStream is) {
19         try {
20             ByteArrayOutputStream baos = new ByteArrayOutputStream();
21             byte[] buffer = new byte[1024];
22             int len = -1;
23             while( (len = is.read(buffer))!=-1){
24                 baos.write(buffer, 0, len);
25             }
26             is.close();
27             String temptext = new String(baos.toByteArray());
28             if(temptext.contains("charset=gb2312")){//解析meta标签
29                 return new String(baos.toByteArray(),"gb2312");
30             }else{
31                 return new String(baos.toByteArray(),"utf-8");
32             }
33         } catch (IOException e) {
34             e.printStackTrace();
35             return null;
36         }
37     }
38 }
时间: 2024-08-11 16:38:07

Android(java)学习笔记203:网页源码查看器的相关文章

黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器

1 该项目的主要功能就是从将后台的html网页在Android的界面上显示出来 后台就是建立一个java web工程在工程尚建立一个html或者jsp文件就可以了,这里主要看Android客户端的程序 xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr

传播智客学习笔记--L24 网页源码查看和添加滚动条

添加滚动条 1 <ScrollView 2 android:layout_width="wrap_content" 3 android:layout_height="wrap_content" 4 > 5 <TextView 6 android:id="@+id/html" 7 android:layout_width="wrap_content" 8 android:layout_height="

网页源码查看器

网页源码查看器 代码实现步骤 [1]搭建UI [2]httpurlconnection类基本用法 @OnClick(R.id.btn) public void onViewClicked() { final String url = mEt.getText().toString().trim(); if (TextUtils.isEmpty(url)) { Toast.makeText(this, "网址不能为空" + url, Toast.LENGTH_SHORT).show();

01_网页源码查看器基本实现

安卓上面敲127.0.0.1或者是localhost是不行的,安卓上面的localhost/127.0.0.1默认是10.0.2.2.有些第三方的模拟器可能不是这个值.安卓自带的模拟器肯定是没问题的.如果是第三方的模拟器自己练习一下可以搞一个路由器连接一下,让你当前的机器有一个地址.路由还是比较好搞的,把你的手机共享一下wifi.把所有的设备都连接到你的手机上,组成一个局域网,你把流量关了就可以了.

android篇-如何做一个简单的安卓源码查看器

1,网页源码查看器: Httpurlconnection:用于发送或接收数据 Mainactivity篇: import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.os.Bundle; import android.os.Handler; import android.os.Lo

Hadoop学习笔记(10) ——搭建源码学习环境

Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步调试呢? 看程序不能调那多痛苦啊,想看跟踪一下变量,想看一下执行路径都难. 所以这里,我们得把这个调试环境搭建起来.Hadoop的主要代码是用java编写的,所以这里就选用eclipse作为环境. Hadoop目录下,本身就可以为作eclipse的一个工程来操作,但这里我不想,我想自己来建一个工程,

memcached学习笔记——存储命令源码分析下篇

上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制. 本文是延续上一篇,继续分析存储命令的源码.接上一篇内存分配成功后,本文主要讲解:1.memcached存储方式:2.add和set命令的区别. memcached存储方式 哈希表(HashTable) 哈希表在实践中使用的非常广泛,例如编译器通常会维护的一个符号表来保存标记,很多高级语言中也显式的支持哈希

memcached学习笔记——存储命令源码分析上

原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command函数,探究memcached客户端的set命令,解读memcached是如何解析客户端文本命令,剖析memcached的内存管理,LRU算法是如何工作等等. 解析客户端文本命令 客户端向memcached server发出set操作,memcached server读取客户端的命令,客户端的连接状态

Python爬虫学习之获取网页源码

偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义就不多说了,不知道的请自行点击查看 =>百度百科 网络爬虫,维基百科 网络爬虫 有很多编程语言都可以编写网络爬虫,只不过各有各的优缺点,这里我选择用Python语言编写爬虫,因为Python是一门非常适合用来编写爬虫的语言,用它实现爬虫的代码量相对其他语言要少很多,并且python语言对网络编程这类模块