1.背景
在开发android 的时候,网络请求时必不可少的,在此,封装成一个类,方便调用;
2.注意
在这里实现了 HttpUrlConnection (不是HttpsUrlConnection)的get请求和 HttpClient 的 Get和 Post请求!
这里封装的仅仅是数据的操作,不包括 图片的请求和上传!
3.HttpUrlConnection 实现
这个请求成功后,需要使用 IO流来读取!
public static String getData() throws Exception{
try {
//HttpPath.GetGamesPath() : 网络请求路径
URL url=new URL(HttpPath.GetGamesPath());
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode()==200){
InputStream ips=conn.getInputStream();
byte[] data=read(ips);
String str=new String(data);
System.out.println(str);
return str;
}else{
return "网络错误 :conn.getResponseCode() ="+conn.getResponseCode();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
return "HttpService.getGamesData()发生异常! "+e.getMessage();
}
}
/*
* 读取流中的数据
* */
public static byte[] read(InputStream inStream) throws Exception {
ByteArrayOutputStream outStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=0;
while((len=inStream.read(buffer))!=-1){
outStream.write(buffer,0,len);
}
inStream.close();
return outStream.toByteArray();
}
4.Httpclient , Httppost , EneityUtils 实现 post 请求操作
这里注意的是传参数的时候需要的是 List<BasicNameValuePair> , 参数格式化 需要的是 UrlEncodeFormEntity 方法!
/**
* httpclient post提交数据
* @param parameters
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String toPostdata(List<BasicNameValuePair> parameters) throws ClientProtocolException, IOException{
String str="获取失败";
//初始化
HttpClient client=new DefaultHttpClient();
//HttpPath.GetGamesPath() : 网络请求路径
HttpPost httpPost=new HttpPost(HttpPath.GetGamesPath());
//设置参数
UrlEncodedFormEntity params=new UrlEncodedFormEntity(parameters,"UTF-8");
httpPost.setEntity(params);
//执行请求
HttpResponse response= client.execute(httpPost);
//取得返回值
if(response.getStatusLine().getStatusCode()==200){
//请求成功
HttpEntity entity=response.getEntity();
str=EntityUtils.toString(entity, "UTF-8");
}
return str;
}
5.Httpclient , Httpget , EneityUtils 实现 get请求操作
/**
* httpclient get 获得数据
* @return
*/
public static String toGetData(){
String str="获取数据失败";
HttpClient client=new DefaultHttpClient();
HttpPath.GetGamesPath() : 网络请求路径
HttpGet get=new HttpGet(HttpPath.GetGamesPath());
try {
HttpResponse httpResponse=client.execute(get);
if(httpResponse.getStatusLine().getStatusCode()==200){
str=EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
}
return str;
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
return "toGetData 异常:"+e.getMessage();
} catch (IOException e) {
// TODO Auto-generated catch block
return "toGetData 异常:"+e.getMessage();
}
}
6.对比
相比之下 HttpClient 比 HttpUrlConnection 更方便些,但是 还是看习惯而言!