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:

 package com.itheima.netsourceviewer;

 import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; import com.itheima.netsourceviewer.utils.StreamTools; public class MainActivity extends Activity {
protected static final int SUCCESS = 1;
protected static final int ERROR = 2; private EditText et_path;
private TextView tv_result; private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SUCCESS:
String text = (String) msg.obj;
tv_result.setText(text);
break;
case ERROR:
Toast.makeText(MainActivity.this, "请求失败", 1).show();
break;
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path = (EditText) findViewById(R.id.et_path);
tv_result = (TextView) findViewById(R.id.tv_result);
}
/**
* 查看源文件的点击事件
* @param view
*/
public void click(View view){
final String path = et_path.getText().toString().trim();
//访问网络,把html源文件下载下来
new Thread(){
public void run() {
try {
//获取url对象
URL url = new URL(path);
//获取链接对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//获取请求方式,默认GET
conn.setRequestMethod("GET");//声明请求方式 默认get
//告诉服务器我是什么样的客户端
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");
//获取状态吗
int code = conn.getResponseCode();
//判断状态吗
if(code ==200){
InputStream is = conn.getInputStream();
//使用工具类, 把字节输入流的数据编程字符串
String result = StreamTools.readStream(is); Message msg = Message.obtain();//减少消息创建的数量
msg.obj = result;
msg.what = SUCCESS;
handler.sendMessage(msg);
}
} catch (Exception e) {
Message msg = Message.obtain();//减少消息创建的数量
msg.what = ERROR;
handler.sendMessage(msg);
e.printStackTrace();
}
};
}.start();
}
}

 

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

 package com.itheima.netsourceviewer.utils;

 import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; /**
* 流的工具类
* @author Administrator
*
*/
public class StreamTools {
/**
* 把输入流的内容转换成字符串
* @param is
* @return null解析失败, string读取成功
*/
public static String readStream(InputStream is) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while( (len = is.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
is.close();
String temptext = new String(baos.toByteArray());
if(temptext.contains("charset=gb2312")){//解析meta标签
return new String(baos.toByteArray(),"gb2312");
}else{
return new String(baos.toByteArray(),"utf-8");
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}

最新文章

  1. 百度之星初赛2A 1001 ALL X(HDU 5690)
  2. JAVA作业 字符变整型相加,整型输出
  3. centos python nginx uwsgi
  4. sed总结
  5. C# 利用范型与扩展方法重构代码
  6. 【转】深入理解Android的startservice和bindservice--不错
  7. html的空格显示距离问题
  8. js获取宽度设置thickbox百分比
  9. 页面嵌套frame,Selenium定位问题
  10. 关于springmvc接受简单参数和List集合数据的实现
  11. Android开发优化之——使用软引用和弱引用
  12. Linux环境编程导引
  13. java截取2个指定字符之间的字符串
  14. Testlink1.9.17使用方法( 第三章 初始配置[配置用户、产品] )
  15. Java学习笔记42(数据库连接池 druid连接池)
  16. H5的本地存储技术及其与Cookie的比较
  17. uva 1629切蛋糕(dp)
  18. 洛谷1968美元汇率 dp
  19. Linux高级文件系统管理(8)
  20. OS之进程管理---实时CPU调度

热门文章

  1. SqlHelper 帮助文档及详解--项目初步搭建
  2. [BZOJ 1029] [JSOI2007] 建筑抢修 【贪心】
  3. 应用安全技术趋势之 Top 5
  4. 能分析压缩的日志,且基于文件输入的PYTHON代码实现
  5. Qt中连接到同一signal的多个slots的执行顺序问题(4.6以后按连接顺序执行)
  6. FILTER优化
  7. bzoj3689
  8. window.alert弹出处理
  9. iframe 中嵌套刷新
  10. Intersecting Lines - POJ 1269(判断平面上两条直线的关系)