Android 开发工具类 03_HttpUtils

Http 请求的工具类:

1、异步的 Get 请求;

2、异步的 Post 请求;

3、Get 请求,获得返回数据;

4、向指定 URL 发送 POST方法的请求。

  1 import java.io.BufferedReader;
  2 import java.io.ByteArrayOutputStream;
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.io.InputStreamReader;
  6 import java.io.PrintWriter;
  7 import java.net.HttpURLConnection;
  8 import java.net.URL;
  9
 10 // Http 请求的工具类
 11 public class HttpUtils
 12 {
 13
 14     private static final int TIMEOUT_IN_MILLIONS = 5000;
 15
 16     public interface CallBack
 17     {
 18         void onRequestComplete(String result);
 19     }
 20
 21
 22     /**
 23      * 异步的 Get 请求
 24      *
 25      * @param urlStr
 26      * @param callBack
 27      */
 28     public static void doGetAsyn(final String urlStr, final CallBack callBack)
 29     {
 30         new Thread()
 31         {
 32             public void run()
 33             {
 34                 try
 35                 {
 36                     String result = doGet(urlStr);
 37                     if (callBack != null)
 38                     {
 39                         callBack.onRequestComplete(result);
 40                     }
 41                 } catch (Exception e)
 42                 {
 43                     e.printStackTrace();
 44                 }
 45
 46             };
 47         }.start();
 48     }
 49
 50     /**
 51      * 异步的 Post 请求
 52      * @param urlStr
 53      * @param params
 54      * @param callBack
 55      * @throws Exception
 56      */
 57     public static void doPostAsyn(final String urlStr, final String params,
 58             final CallBack callBack) throws Exception
 59     {
 60         new Thread()
 61         {
 62             public void run()
 63             {
 64                 try
 65                 {
 66                     String result = doPost(urlStr, params);
 67                     if (callBack != null)
 68                     {
 69                         callBack.onRequestComplete(result);
 70                     }
 71                 } catch (Exception e)
 72                 {
 73                     e.printStackTrace();
 74                 }
 75
 76             };
 77         }.start();
 78
 79     }
 80
 81     /**
 82      * Get 请求,获得返回数据
 83      *
 84      * @param urlStr
 85      * @return
 86      * @throws Exception
 87      */
 88     public static String doGet(String urlStr)
 89     {
 90         URL url = null;
 91         HttpURLConnection conn = null;
 92         InputStream is = null;
 93         ByteArrayOutputStream baos = null;
 94         try
 95         {
 96             url = new URL(urlStr);
 97             conn = (HttpURLConnection) url.openConnection();
 98             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
 99             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
100             conn.setRequestMethod("GET");
101             conn.setRequestProperty("accept", "*/*");
102             conn.setRequestProperty("connection", "Keep-Alive");
103             if (conn.getResponseCode() == 200)
104             {
105                 is = conn.getInputStream();
106                 baos = new ByteArrayOutputStream();
107                 int len = -1;
108                 byte[] buf = new byte[128];
109
110                 while ((len = is.read(buf)) != -1)
111                 {
112                     baos.write(buf, 0, len);
113                 }
114                 baos.flush();
115                 return baos.toString();
116             } else
117             {
118                 throw new RuntimeException(" responseCode is not 200 ... ");
119             }
120
121         } catch (Exception e)
122         {
123             e.printStackTrace();
124         } finally
125         {
126             try
127             {
128                 if (is != null)
129                     is.close();
130             } catch (IOException e)
131             {
132             }
133             try
134             {
135                 if (baos != null)
136                     baos.close();
137             } catch (IOException e)
138             {
139             }
140             conn.disconnect();
141         }
142
143         return null ;
144
145     }
146
147     /**
148      * 向指定 URL 发送 POST 方法的请求
149      *
150      * @param url
151      *            发送请求的 URL
152      * @param param
153      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
154      * @return 所代表远程资源的响应结果
155      * @throws Exception
156      */
157     public static String doPost(String url, String param)
158     {
159         PrintWriter out = null;
160         BufferedReader in = null;
161         String result = "";
162         try
163         {
164             URL realUrl = new URL(url);
165             // 打开和URL之间的连接
166             HttpURLConnection conn = (HttpURLConnection) realUrl
167                     .openConnection();
168             // 设置通用的请求属性
169             conn.setRequestProperty("accept", "*/*");
170             conn.setRequestProperty("connection", "Keep-Alive");
171             conn.setRequestMethod("POST");
172             conn.setRequestProperty("Content-Type",
173                     "application/x-www-form-urlencoded");
174             conn.setRequestProperty("charset", "utf-8");
175             conn.setUseCaches(false);
176             // 发送POST请求必须设置如下两行
177             conn.setDoOutput(true);
178             conn.setDoInput(true);
179             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
180             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
181
182             if (param != null && !param.trim().equals(""))
183             {
184                 // 获取URLConnection对象对应的输出流
185                 out = new PrintWriter(conn.getOutputStream());
186                 // 发送请求参数
187                 out.print(param);
188                 // flush输出流的缓冲
189                 out.flush();
190             }
191             // 定义BufferedReader输入流来读取URL的响应
192             in = new BufferedReader(
193                     new InputStreamReader(conn.getInputStream()));
194             String line;
195             while ((line = in.readLine()) != null)
196             {
197                 result += line;
198             }
199         } catch (Exception e)
200         {
201             e.printStackTrace();
202         }
203         // 使用finally块来关闭输出流、输入流
204         finally
205         {
206             try
207             {
208                 if (out != null)
209                 {
210                     out.close();
211                 }
212                 if (in != null)
213                 {
214                     in.close();
215                 }
216             } catch (IOException ex)
217             {
218                 ex.printStackTrace();
219             }
220         }
221         return result;
222     }
223 }
时间: 2024-10-13 05:37:09

Android 开发工具类 03_HttpUtils的相关文章

android开发工具类总结(一)

一.日志工具类 Log.java 1 public class L 2 { 3 private L() 4 { 5 /* 不可被实例化 */ 6 throw new UnsupportedOperationException("Cannot be instantiated!"); 7 } 8 // 是否需要打印bug,可以在application的onCreate函数里面初始化 9 public static boolean isDebug = true; 10 private sta

Android 开发工具类 13_ SaxService

网络 xml 解析方式 1 package com.example.dashu_saxxml; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.HashMap; 6 import java.util.List; 7 8 import javax.xml.parsers.SAXParser; 9 import javax.xml.parsers.SAXParserFactory; 10

Android 开发工具类 35_PatchUtils

增量更新工具类[https://github.com/cundong/SmartAppUpdates] 1 import java.io.File; 2 3 import android.app.Activity; 4 import android.app.ProgressDialog; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.net.Uri; 8 import and

Android开发工具类之DownloadManagerPro

这个工具类就是Android系统下载管理DownloadManager的一个增强类,提供了一些增强方法.或许大家不太了解这个安卓系统自带的DownloadManager这个类,我先做一个简单介绍吧.DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request. DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息.用d

Android 开发工具类 19_NetworkStateReceiver

检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观察者. 1 import java.util.ArrayList; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 i

Android 开发工具类 10_Toast 统一管理类

Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. 1 import android.content.Context; 2 import android.widget.Toast; 3 4 // Toast 统一管理类 5 public class T 6 { 7 8 private T() 9 { 10 /* cannot be instantiated */ 11 throw new UnsupportedOperation

Android 开发工具类 09_SPUtils

SharedPreferences 辅助类: 1.保存在手机里面的文件名: 2.保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法: 3.得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值: 4.移除某个 key 值已经对应的值: 5.清除所有数据: 6.查询某个 key 是否已经存在: 7.返回所有的键值对: 8.创建一个解决 SharedPreferencesCompat.apply 方法的一个兼容类: 1 import jav

Android 开发工具类 33_开机自运行

原理:该类派生自 BroadcastReceiver,重载方法 onReceive ,检测接收到的 Intent 是否符合 BOOT_COMPLETED,如果符合,则启动用户Activity. 1 import android.content.BroadcastReceiver; 2 import android.content.Context; 3 import android.content.Intent; 4 5 public class BootBroadcastReceiver ext

Android 开发工具类 31_WebService 获取手机号码归属地

AndroidInteractWithWebService.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12=