本文实现了用HttpURLConnection实现HTTP请求,主要是用户API接口的访问。
1、实现参数map容器拼接成字符串,加上参数格式化编码
/**
* <将map拼接成url参数>
* <功能详细描述>
* @param params
* @param encode
* @return
* @throws UnsupportedEncodingException
* @see [类、类#方法、类#成员]
*/
public static String paramsToString(Map<String, String> params, String encode) throws UnsupportedEncodingException{
String paramStr = "";
if(params!=null){
Iterator<Entry<String, String>> iter = params.entrySet().iterator();
while (iter.hasNext())
{
Map.Entry<String, String> entry = (Map.Entry<String, String>)iter.next();
String key = URLEncoder.encode(entry.getKey(), encode);
String val = URLEncoder.encode(entry.getValue(), encode);
paramStr += paramStr = "&" + key + "=" + val;
}
if (!paramStr.equals(""))
{
paramStr = paramStr.replaceFirst("&", "");
}
}
return paramStr;
}
/**
* <拼接参数到url上>
* <功能详细描述>
* @param url
* @param params
* @param encode
* @return
* @throws UnsupportedEncodingException
* @see [类、类#方法、类#成员]
*/
public static String encodeParams(String url, Map<String, String> params, String encode)
throws UnsupportedEncodingException
{
String paramStr =paramsToString(params, encode);
if(!"".equals(paramStr)){
url=url+"?"+paramStr;
}
return url;
}
2、get请求服务器
/**
* <get请求服务器>
* <功能详细描述>
* @param url
* @param params
* @param encode
* @return
* @throws UnsupportedEncodingException
* @see [类、类#方法、类#成员]
*/
public static String doGet(String url, Map<String, String> params, String encode) throws UnsupportedEncodingException
{
url = encodeParams(url, params, encode);
String result = null;
HttpURLConnection connection = null;
InputStreamReader in = null;
try
{
URL httpUrl = new URL(url);
connection = (HttpURLConnection)httpUrl.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(TIME);
connection.setReadTimeout(TIME);
int responseCode = connection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
in = new InputStreamReader(connection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(in);
StringBuffer strBuffer = new StringBuffer();
String line = null;
while ((line = bufferedReader.readLine()) != null)
{
strBuffer.append(line);
}
result = URLDecoder.decode(strBuffer.toString(), encode);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (connection != null)
{
connection.disconnect();
}
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return result;
}
3、post请求服务器
/**
* <post请求服务器>
* <功能详细描述>
* @param url
* @param params
* @param encode
* @return
* @throws UnsupportedEncodingException
* @see [类、类#方法、类#成员]
*/
public static String doPost(String url,Map<String,String> params,String encode) throws UnsupportedEncodingException{
String result = null;
String paramsUrl = paramsToString(params, encode);
HttpURLConnection connection = null;
InputStreamReader in = null;
try {
URL httpUrl = new URL(url);
connection = (HttpURLConnection) httpUrl.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Charset", "utf-8");
DataOutputStream dop = new DataOutputStream(
connection.getOutputStream());
dop.writeBytes(paramsUrl);
dop.flush();
dop.close();
in = new InputStreamReader(connection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(in);
StringBuffer strBuffer = new StringBuffer();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
strBuffer.append(line);
}
result = strBuffer.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
总结:在android sdk的最近的几个版本,官方是推荐使用 HttpURLConnection来实现HTTP请求。