本文实现一个基于Android的网络HTML查看器
新建项目,项目布局文件如下:
新建工具类StreamTools.java:
package com.wuyudong.htmlviewer.utils;import java.io.ByteArrayOutputStream;import java.io.InputStream;public class StreamTools { /** * 把输入流的内容转化成字符串 * * @param is * @return */ public static String readInputStream(InputStream is) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = 0; byte[] buffer = new byte[1024]; while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } is.close(); baos.close(); byte[] result = baos.toByteArray(); return new String(result); } catch (Exception e) { e.printStackTrace(); return null; } }}
完整代码如下:
package com.wuyudong.htmlviewer;import java.io.InputStream;import java.io.StreamCorruptedException;import java.net.HttpURLConnection;import java.net.URL;import com.wuyudong.htmlviewer.utils.StreamTools;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.text.TextUtils;import android.view.Menu;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 ERROR = 1; protected static final int SHOW_TEXT = 2; private TextView tv_content; private EditText et_path; // 定义一个消息处理器 private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case ERROR: Toast.makeText(MainActivity.this, "获取数据失败", 0).show(); break; case SHOW_TEXT: String text = (String) msg.obj; tv_content.setText(text); break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_content = (TextView) findViewById(R.id.tv_content); et_path = (EditText) findViewById(R.id.et_path); } public void click(View view) { 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); conn.setReadTimeout(5000); conn.setRequestProperty( "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); String result = StreamTools.readInputStream(is); // tv_content.setText(result); Message msg = new Message(); msg.what = SHOW_TEXT; msg.obj = result; 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(); } }}