HTML查看器

来源:互联网 发布:java redis 并发控制 编辑:程序博客网 时间:2024/06/05 10:19

实现的功能:借助于服务端,让Android获取服务端html内容

用到知识:

1)Handler初步了解

2)根据给定的url访问网络, 抓去html代码

3)将InputStream流转换成字符串信息,并在转换的过程中通过将String转换成字符数组进行编码


主要代码:

private static final String TAG = "MainActivity";private static final int SUCCESS = 0;protected static final int ERROR = 1;private EditText etUrl;private TextView tvHtml;priva<strong>te Handler handler = new Handler()</strong> {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case SUCCESS: <strong>tvHtml.setText((String) msg.obj);</strong>break;case ERROR:Toast.makeText(MainActivity.this, "访问失败", 0).show();break;default:break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etUrl = (EditText) findViewById(R.id.et_url);tvHtml = (TextView) findViewById(R.id.tv_html);}public void getHtml(View v) {final String url = etUrl.getText().toString();new Thread(new Runnable() {@Overridepublic void run() {// 请求网络<strong>String html = getHtmlFromInternet(url);</strong>if(!<strong>TextUtils.isEmpty(html)</strong>) {// 更新textview的显示了Message msg = new Message();msg.what = SUCCESS;msg.obj = html;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}).start();}/** * 根据给定的url访问网络, 抓去html代码 * @param url * @return */protected String<strong> getHtmlFromInternet(String url)</strong> {try {<strong>URL mURL = new URL(url);HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();</strong>conn.setRequestMethod("GET");conn.setConnectTimeout(10000);conn.setReadTimeout(5000);//conn.connect();int responseCode = conn.getResponseCode();if(responseCode == 200) {InputStream is = conn.getInputStream();String html = getStringFromInputStream(is);return html;} else {Log.i(TAG, "访问失败: " + responseCode);}} catch (Exception e) {e.printStackTrace();}return null;}/** * 根据流返回一个字符串信息 * @param is * @return * @throws IOException  */private String getStringFromInputStream(InputStream is) throws IOException {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();<strong>String html = baos.toString();// 把流中的数据转换成字符串, 采用的编码是: utf-8String charset = "utf-8";if(html.contains("gbk") || html.contains("gb2312")|| html.contains("GBK") || html.contains("GB2312")) {// 如果包含gbk, gb2312编码, 就采用gbk编码进行对字符串编码charset = "gbk";}</strong>html = new String(baos.toByteArray(), charset);// 对原有的字节数组进行使用处理后的编码名称进行编码baos.close();return html;}


结果如下:










0 0
原创粉丝点击