HttpUtils 用于进行网络请求的工具类

dddy的头像 dddy 9 2015-07-22 11:52 6

 基本信息

× 1    × 1   

浏览数: 15390

分享时间: 2 年 前

19
用于进行网络请求的工具类,可进行get,post两种请求,值得一提的是这个utils给大家提供了一个回调接口,方便获取下载文件的进度
    import java.io.BufferedReader;  
    import java.io.ByteArrayOutputStream;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.io.PrintWriter;  
    import java.net.HttpURLConnection;  
    import java.net.URL;  
      
    //Http请求的工具类  
    public class HttpUtils  
    {  
      
        private static final int TIMEOUT_IN_MILLIONS = 5000;  
      
        public interface CallBack  
        {  
            void onRequestComplete(String result);  
        }  
      
      
        /** 
         * 异步的Get请求 
         *  
         * @param urlStr 
         * @param callBack 
         */  
        public static void doGetAsyn(final String urlStr, final CallBack callBack)  
        {  
            new Thread()  
            {  
                public void run()  
                {  
                    try  
                    {  
                        String result = doGet(urlStr);  
                        if (callBack != null)  
                        {  
                            callBack.onRequestComplete(result);  
                        }  
                    } catch (Exception e)  
                    {  
                        e.printStackTrace();  
                    }  
      
                };  
            }.start();  
        }  
      
        /** 
         * 异步的Post请求 
         * @param urlStr 
         * @param params 
         * @param callBack 
         * @throws Exception 
         */  
        public static void doPostAsyn(final String urlStr, final String params,  
                final CallBack callBack) throws Exception  
        {  
            new Thread()  
            {  
                public void run()  
                {  
                    try  
                    {  
                        String result = doPost(urlStr, params);  
                        if (callBack != null)  
                        {  
                            callBack.onRequestComplete(result);  
                        }  
                    } catch (Exception e)  
                    {  
                        e.printStackTrace();  
                    }  
      
                };  
            }.start();  
      
        }  
      
        /** 
         * Get请求,获得返回数据 
         *  
         * @param urlStr 
         * @return 
         * @throws Exception 
         */  
        public static String doGet(String urlStr)   
        {  
            URL url = null;  
            HttpURLConnection conn = null;  
            InputStream is = null;  
            ByteArrayOutputStream baos = null;  
            try  
            {  
                url = new URL(urlStr);  
                conn = (HttpURLConnection) url.openConnection();  
                conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
                conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
                conn.setRequestMethod("GET");  
                conn.setRequestProperty("accept", "*/*");  
                conn.setRequestProperty("connection", "Keep-Alive");  
                if (conn.getResponseCode() == 200)  
                {  
                    is = conn.getInputStream();  
                    baos = new ByteArrayOutputStream();  
                    int len = -1;  
                    byte[] buf = new byte[128];  
      
                    while ((len = is.read(buf)) != -1)  
                    {  
                        baos.write(buf, 0, len);  
                    }  
                    baos.flush();  
                    return baos.toString();  
                } else  
                {  
                    throw new RuntimeException(" responseCode is not 200 ... ");  
                }  
      
            } catch (Exception e)  
            {  
                e.printStackTrace();  
            } finally  
            {  
                try  
                {  
                    if (is != null)  
                        is.close();  
                } catch (IOException e)  
                {  
                }  
                try  
                {  
                    if (baos != null)  
                        baos.close();  
                } catch (IOException e)  
                {  
                }  
                conn.disconnect();  
            }  
              
            return null ;  
      
        }  
      
        /**  
         * 向指定 URL 发送POST方法的请求  
         *   
         * @param url  
         *            发送请求的 URL  
         * @param param  
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。  
         * @return 所代表远程资源的响应结果  
         * @throws Exception  
         */  
        public static String doPost(String url, String param)   
        {  
            PrintWriter out = null;  
            BufferedReader in = null;  
            String result = "";  
            try  
            {  
                URL realUrl = new URL(url);  
                // 打开和URL之间的连接  
                HttpURLConnection conn = (HttpURLConnection) realUrl  
                        .openConnection();  
                // 设置通用的请求属性  
                conn.setRequestProperty("accept", "*/*");  
                conn.setRequestProperty("connection", "Keep-Alive");  
                conn.setRequestMethod("POST");  
                conn.setRequestProperty("Content-Type",  
                        "application/x-www-form-urlencoded");  
                conn.setRequestProperty("charset", "utf-8");  
                conn.setUseCaches(false);  
                // 发送POST请求必须设置如下两行  
                conn.setDoOutput(true);  
                conn.setDoInput(true);  
                conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
                conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
      
                if (param != null && !param.trim().equals(""))  
                {  
                    // 获取URLConnection对象对应的输出流  
                    out = new PrintWriter(conn.getOutputStream());  
                    // 发送请求参数  
                    out.print(param);  
                    // flush输出流的缓冲  
                    out.flush();  
                }  
                // 定义BufferedReader输入流来读取URL的响应  
                in = new BufferedReader(  
                        new InputStreamReader(conn.getInputStream()));  
                String line;  
                while ((line = in.readLine()) != null)  
                {  
                    result += line;  
                }  
            } catch (Exception e)  
            {  
                e.printStackTrace();  
            }  
            // 使用finally块来关闭输出流、输入流  
            finally  
            {  
                try  
                {  
                    if (out != null)  
                    {  
                        out.close();  
                    }  
                    if (in != null)  
                    {  
                        in.close();  
                    }  
                } catch (IOException ex)  
                {  
                    ex.printStackTrace();  
                }  
            }  
            return result;  
        }  
    }  


  • yangtantan的头像 yangtantan 2017-02-10 09:49 代码数:0

    hao

  • 542886872的头像 542886872 2015-07-24 15:19 代码数:1
    不错哦
  • 动脑学院的头像 动脑学院 2017-06-07 17:07 代码数:0

    感谢博主分享,分析的非常到位,我也发现一个好的Android性能优化视频链接:http://pan.baidu.com/s/1bpzUIj9 密码:nb88 拿走不谢,请叫我雷锋 欢迎加群595642365验证码05 一起交流 

  • z365892502的头像 z365892502 2017-06-27 13:10 代码数:0

  • DuXinwu的头像 DuXinwu 2015-12-18 16:34 代码数:0
    不错呀!值得学习
您的评论: