[android] 网络html查看器

访问一个网页的请求实际上就是一个GET请求,应用的布局没啥好说的,线性布局,定义好控件,在activity代码里面先获取到控件,获取到EditText控件的网络路径,开启get请求

 

开启一个新的线程,new Thread(){}.start()

获取Url对象,new出来,参数:pathStringurl,内部类访问外部类的变量,应该顶一次final

主线程中定义成员属性Handler对象,为了方便直接重写handleMessage()方法,回调过来的参数是Message对象,获取Message对象的what属性和obj属性,

NewUrl之后,会有异常产生,捕获异常,

调用Url对象的openConnection()方法,得到HttpUrlConnection对象,这里需要强转

调用HttpUrlConnection对象的setRequestMethod()方法

调用HttpUrlConnection对象的setConnectTimeout()方法

调用HttpUrlConnection对象的setRequestProperty()方法

调用HttpUrlConnection对象的getResponseCode()方法,得到响应码,进行判断

调用HttpUrlConnection对象的getInputStream()方法,得到InputStream对象

 

把流的数据转换成文本,是一个非常常用的操作,新建一个包utils,放工具类

新建一个类StreamTools,里面定义一个静态方法readInputStream()

获取ByteArrayOutputStream对象,通过new一个字节数组输出流

定义一个intlen长度是0

定义一个byte[]的数组,通过new byte[1024]定义一个1024字节的数组

定义一个while循环,条件是调用InputStream对象的read(buffer)方法,参数:上面定义的byte[]数组,把数据读入到byte[]数组里面,返回一个读取的长度,如果长度等于-1那就是读到末尾了,因此这个进行循环判断

调用ByteArrayOutputStream对象的write(buffer,len)方法,读取字节数组,从0开始到len长度

循环完成之后,关闭输入流,调用ByteArrayOutputStream对象的toByteArray()得到一个字节数组,return出来用new String()包装一下

 

调用Handler对象的sendMessage()方法发送数据

 

当设置请求参数的时候,不能多加冒号,否则容易出错

package com.tsh.hrmlviewer;

import java.io.InputStream;
 java.net.HttpURLConnection;
 java.net.MalformedURLException;
 java.net.URL;

 com.tsh.hrmlviewer.utils.StreamTools;

 android.app.Activity;
 android.os.Bundle;
 android.os.Handler;
 android.os.Message;
 android.text.TextUtils;
 android.view.View;
 android.widget.EditText;
 android.widget.TextView;
 android.widget.Toast;

public class MainActivity extends Activity {
    protected static final int SUCCESS = 1;
    int ERROR = 2private EditText et_path;
     TextView tv_show;
    // 消息处理器
    public Handler handler = new Handler() {
        void handleMessage(Message msg) {
            switch (msg.what) {
            case SUCCESS:

                String text = (String) msg.obj;
                tv_show.setText(text);
                break;
             ERROR:
                Toast.makeText(MainActivity.this,"获取数据失败",0).show();
                ;
            }
        };
    };

    @Override
     onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_path = (EditText) findViewById(R.id.et_path);
        tv_show = (TextView) findViewById(R.id.tv_show);
    }

     查看
     click(View v) {
        final String path = et_path.getText().toString().trim();
        if (TextUtils.isEmpty(path)) {
            Toast.makeText().show();
        } else {
             开启新线程
             Thread() {
                 run() {
                    try {
                        URL url =  URL(path);
                        HttpURLConnection conn = (HttpURLConnection) url
                                .openConnection();
                        conn.setRequestMethod("GET");
                        conn.setConnectTimeout(5000);
                        int code = conn.getResponseCode();
                        if (code == 200) {
                            InputStream is = conn.getInputStream();
                            String res = StreamTools.readInputStream(is);
                            Message msg =  Message();
                            msg.what = SUCCESS;
                            msg.obj = res;
                            handler.sendMessage(msg);
                        }  {
                            Message msg =  ERROR;
                            handler.sendMessage(msg);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Message msg =  Message();
                        msg.what = ERROR;
                        handler.sendMessage(msg);
                    }
                }
            }.start();
        }
    }

}

工具类:

 com.tsh.hrmlviewer.utils;

 java.io.ByteArrayOutputStream;
 java.io.InputStream;

class StreamTools {
    /**
     * 读取输入流
     * @param is
     * @return
     */
    static String readInputStream(InputStream is){
        ByteArrayOutputStream baos= ByteArrayOutputStream();
        int len=0;
        byte[] buffer=new byte[1024];
        while((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
            is.close();
            byte[] res=baos.toByteArray();
            return  String(res);
        }  (Exception e) {
            e.printStackTrace();
        }
        null;
    }
}

 

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...