最近在看Http协议等网络部分的知识,网络通而信可谓android中比较重要的部分了,而实现Http通信的最重要的莫过于俩个接口:HttpURLConnection和HttpClient。一般情况下俩个接口简单的访问网络。Apache提供的是后者,以后网络部分估计HttpClient用的较多一下。而且实现较容易理解一些。以下是源代码:首先实现的HttpURLConnection的GET方法,下面俩个接口的俩个方法即GET和POST均会实现。。。
public class BaiscHttpGetWay {
private String path1=null;
private String resultData=null;
public String getpath(String path) throws Exception
{
this.path1=path;
URL url=new URL(path1);
System.out.println(path1);
if(url!=null)
{ //由于get的方法相比较容易就不做解释了
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(5*1000);
if(conn.getResponseCode()==200)
{
InputStream is=conn.getInputStream();
resultData=getresultdata(is);
System.out.println(resultData);
}
conn.disconnect();
}
return resultData;
}
private String getresultdata(InputStream is) throws Exception
{
// TODO Auto-generated method stub
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while((is.read(buffer))!=-1)
{
out.write(buffer,0,len);
}
byte[] data=out.toByteArray();
return new String(data);
}
}
然后是POSt方法的实现:
public class BasicHttpPostWay
{
private String path1=null;
private String resultData=null;
public String getpath(String path,String param)throws Exception
{
//传递是以二进制传递字符串无法完成此操作所以用byte数组传递也可以用其他方法
byte[] data=param.getBytes();
this.path1=path;
URL url=new URL(path1);
System.out.println(path1);
if(url!=null)
{
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//这里是Post请求,所以就设置为true
conn.setDoInput(true);
conn.setDoOutput(true);
//设置请求Post
conn.setRequestMethod("POST");
conn.setConnectTimeout(5*1000);
//由于Post请求不能使用缓存
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
//设置其他畅通设置格式以及数组长度,不过若你不用数组直接用字符串的话
//查了一下可以用URLEcode.encode进行操作
conn.setRequestProperty("Connection","Keep-Alive" );
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length",String.valueOf(data) );
//配置本次连接Content-type,后面参数正文为Orlencoded编码过的form参数具体是啥我也不知到反正为固定格式
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded" );
//连接,从打开连接即openConnection到connect之间必须先配好
conn.connect();
//查了一下大部分Post都是用DataOutputStream完成此操作
DataOutputStream out=new DataOutputStream(conn.getOutputStream());
out.write(data);
//刷新,关闭
out.flush();
out.close();
if(conn.getResponseCode()==200)
{
InputStream is=conn.getInputStream();
//定义一个方法用来转换流的内容
resultData=getresultData(is);
System.out.println(resultData);
}
conn.disconnect();
}
return resultData;
}
private String getresultData(InputStream is) throws Exception
{ // TODO Auto-generated method stub
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while((is.read(buffer))!=-1)
{
out.write(buffer,0,len);
}
byte[] data=out.toByteArray();
return new String(data);
}
}
接下来是HttpClient借口中方法的实现:
首先是GET方法:
public class ApacheHttpGetWay
{
private String path1=null;
private String resultDataString=null;
public String getpath(String path)throws Exception
{
this.path1=path;
//HttpGet的连接对象
HttpGet httpGet=new HttpGet(path1);
//声明一个HttpClient的对象
HttpClient httpClient=new DefaultHttpClient();
//执行请求并用HttpResponse接受请求过来的内容
HttpResponse httpResponse=httpClient.execute(httpGet);
//判断请求是否成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{ //取得返回的字符串
resultDataString=EntityUtils.toString(httpResponse.getEntity());
System.out.println(resultDataString);
}
else
{
System.out.println("it is null!!!");
}
return resultDataString;
}
}
//然后是POST方法
public class ApacheHttpPostWay
{
private String path1=null;
private String resultDataString=null;
public String getpath(String path,List<NameValuePair> param)throws Exception
{
this.path1=path;
//设置连接对象即连接请求
HttpPost post=new HttpPost(path1);
//将参数加入请求里面定死的
post.setEntity(new UrlEncodedFormEntity(param,HTTP.UTF_8));
//获取HttpClient的对象
HttpClient httpClient=new DefaultHttpClient();
//执行请求并将字符返回到httpResponse
HttpResponse httpResponse=httpClient.execute(post);
//判断是否连接成功格式定死的
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{ //返回字符串格式定死的
resultDataString=EntityUtils.toString(httpResponse.getEntity());
System.out.println(resultDataString);
}
else {
System.out.println("it is null!!!");
}
return resultDataString;
}
}
总之而言,在做项目的过程中POST方法使用的较多,因其保密性较好,不过GET用的也较多,所以看个人喜好了。在学习这一块内容的时候要好好把握俩个接口的使用法,这样才能不容易记混!!