HttpURLConnection访问网络数据

HttpURLConnection访问网络数据

工具类,使用 GET POST 请求网络数据的工具类

public class HttpURLConnectionUtils {

    private String resultGet;
    private String resultPost ;

    /**
     *  GET 请求
     *
     * @param url  这个参数是请求网站的主体部分,例如:https://www.baidu.com/s?
     * @param paramsMap  这个参数是请求的具体参数,键值对形式,例如:tn=baidutop10 &rsv_idx=2&wd=宁波天气预报
     * @return  返回参数到调用者,然后解析处理
     */
    public String requestGet(String url, HashMap<String, String> paramsMap) {

        try {
            //将集合里面的数据取出来拼接
            StringBuilder tempParams = new StringBuilder();
            int pos = 0;
            for (String key : paramsMap.keySet()) {

                if (pos > 0) {

                    tempParams.append("&");

                }
                tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8")));
                pos++;
            }
            String requestUrl = url + tempParams.toString();
            // 新建一个URL对象
            URL url1 = new URL(requestUrl);
            // 打开一个HttpURLConnection连接
            HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
            // 设置连接主机超时时间
            conn.setConnectTimeout(5 * 1000);
            //设置从主机读取数据超时
            conn.setReadTimeout(5 * 1000);
            // 设置是否使用缓存  默认 true
            conn.setUseCaches(true);
            //设置请求方式
            conn.setRequestMethod("GET");
            //设置请求头信息
            conn.setRequestProperty("Content-Type", "application/json");
            //设置客户端与服务端连接的类型
            conn.setRequestProperty("Connection", "Keep-Alive");
            //建立连接
            conn.connect();
            //判断连接成功否
            if (conn.getResponseCode() == 200) {

                resultGet = streamToString(conn.getInputStream());
                Log.e("GET","GET请求成功");

            } else {

                Log.e("GET","GET请求失败");

            }
            //关闭连接
            conn.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultGet;
    }

    /**
     * POST 请求
     *
     * @param url  这个参数是请求网站的主体部分,例如:https://www.baidu.com/s?
     * @param paramsMap  这个参数是请求的具体参数,键值对形式,例如:tn=baidutop10 &rsv_idx=2&wd=宁波天气预报
     * @return  返回参数到调用者,然后解析处理
     */
    public String requestPost(String url, HashMap<String, String> paramsMap){

        try{

            StringBuilder tempParams = new StringBuilder();
            //将集合里面的数据取出来拼接
            int pos = 0 ;
            for (String key : paramsMap.keySet()){
                if (pos > 0){

                    tempParams.append("&");

                }
                tempParams.append(String.format("%s=%s", key , URLEncoder.encode(paramsMap.get(key),"UTF-8")));
                pos++ ;
            }
            String params = tempParams.toString();
            // 请求的参数转换为byte数组
            byte[] postData = params.getBytes();
            //创建 URL 对象
            URL url1 = new URL(url);
            //建立连接
            HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
            //设置连接超时时间
            conn.setConnectTimeout(5 * 1000);
            //设置从主机读取数据超时
            conn.setReadTimeout(5 * 1000);
            // Post请求必须设置允许输出 默认false
            conn.setDoOutput(true);
            //设置请求允许输入 默认是true
            conn.setDoInput(true);
            // Post请求不能使用缓存
            conn.setUseCaches(false);
            // 设置为Post请求
            conn.setRequestMethod("POST");
            //设置本次连接是否自动处理重定向
            conn.setInstanceFollowRedirects(true);
            // 配置请求Content-Type
            conn.setRequestProperty("Content-Type", "application/json");
            // 开始连接
            conn.connect();
            // 发送请求参数
            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
            dos.write(postData);
            dos.flush();
            dos.close();
            // 判断请求是否成功
            if (conn.getResponseCode() == 200){
                //获取返回的数据
                resultPost = streamToString(conn.getInputStream());
                Log.e("POST","POST请求成功");

            }else {

                Log.e("POST","POST请求失败");

            }
            //断开连接
            conn.disconnect();

        }catch (Exception e){
            e.printStackTrace();
        }

        return resultPost;
    }


    //将输入流转换成字符串
    private String streamToString(InputStream in) {

        try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = in.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, len);
            }
            byteArrayOutputStream.close();
            in.close();
            byte[] bytes = byteArrayOutputStream.toByteArray();
            return new String(bytes);
        } catch (Exception e) {
            return null;
        }
    }
}

MainActivity 调用

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private TextView tv;
    private Button get_btn;
    private HttpURLConnectionUtils utils;
    private HashMap<String, String> hashMap;
    private MyHandler myHandler;

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        myHandler = new MyHandler();
        hashMap = new HashMap<String, String>();
        hashMap.put("tn", "baidutop10");
        hashMap.put("rsv_idx", "2");
        hashMap.put("wd", "宁波天气预报");

    }

    private void init() {

        tv = findViewById(R.id.textView2);
        get_btn = findViewById(R.id.get_btn);
        get_btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.get_btn:

                new Thread() {

                    @Override
                    public void run() {

                        utils = new HttpURLConnectionUtils();
                        //第一个参数是请求网站的主体部分,例如:https://www.baidu.com/s?
                        //第二个参数是请求的具体参数,键值对形式,例如:tn=baidutop10 &rsv_idx=2&wd=宁波天气预报
                        // 完整的请求网址是第一个+第二个,例如:https://www.baidu.com/s?tn=baidutop10&rsv_idx=2&wd=宁波天气预报
                        String s = utils.requestPost("https://www.baidu.com/s?",hashMap);
                        Message message = new Message();
                        message.what = 101;
                        message.obj = s ;
                        myHandler.sendMessage(message);
                    }
                }.start();

                    break;
        }
    }

    class MyHandler extends Handler {
        @Override
        public void handleMessage(@NonNull Message msg) {

            if (msg.what == 101) {

                //此处需要将数据进行解析(xml 或者 json)
                tv.setText(msg.obj.toString());

            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值