Android Http相關輔助類 HttpUtils

ed6y 9年前發布 | 3K 次閱讀 Java Android

 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;  
}  

} </pre>

 本文由用戶 ed6y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!