你的位置:首页 > 操作系统

[操作系统]Android 网络HTML查看器


本文实现一个基于Android的网络HTML查看器

新建项目,项目布局文件如下:

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="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:hint="请输入html路径" />  <Button    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:onClick="click"    android:text="查看" />  <ScrollView    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <TextView      android:id="@+id/tv_content"      android:layout_width="fill_parent"      android:layout_height="fill_parent" >    </TextView>  </ScrollView></LinearLayout>

新建工具类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();    }  }}