本文实现一个基于Android的网络HTML查看器
新建项目,项目布局文件如下:
<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: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(); } } }