Android(java)学习笔记203:网页源码查看器(Handler消息机制)
2015-08-30 15:54
555 查看
1.项目框架图:
2.首先是布局文件activity_main.xml:
3.MainActivity.java:
4.这里的工具类是StreamTools.java:
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; } } }
相关文章推荐
- DES的加密与解密(可逆)
- Android视频教程分享
- Android Listview横向滑动
- android服务调用
- Android -- RecyclerView的使用
- Android Studio 安装后无法打开的问题
- Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)
- C#客户端与Android服务端的Socket通信
- Android--Toast使用介绍
- Android应用程序用户界面(六)
- Android帮助文档本地打开慢的解决方案
- android 中 系统日期时间的获取
- adb uninstall卸载apk文件说明
- 在 Android 中 Intent 的概念及应用
- Android中插件开发篇总结和概述
- Android基础入门教程——5.2.3 Fragment实例精讲——底部导航栏的实现(方法3)
- Android DiskLruCache完全解析,硬盘缓存的最佳方案 对源码的理解
- 嵌套listview的高度问题解决
- Android eventbus开源框架(模仿)
- Android自学笔记之 MultiAutoTextView的功能、特殊属性、用法(与AutoTextView的区别和近似)