码迷,mamicode.com
首页 > 移动开发 > 详细

Android网络编程之Apache接口

时间:2016-05-13 04:27:09      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

一,通过Apache接口访问网络所必须的类

HttpClient

概述

---HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。(摘自百度百科)


成员变量


构造方法

---DefaultHttpClient()

普通方法

---execute()//发送请求,需要一个表示请求方法的对象作为参数,返回一个封装了响应信息的HttpResponse对象

静态方法


HttpGet

概述

---如果HttpClient发送请求时使用该对象作为参数则表示发送的是GET请求,该请求一般用于获取/查询资源信息

---GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。


成员变量


构造方法

---HttpGet()//构造一个GET请求,需要一个WEB地址作为参数

普通方法

静态方法


HttpResponse

概述

---该类封装了发起Http请求后返回的信息


成员变量


构造方法

---HttpClient.execute()//客户端发送请求后返回该对象实例

普通方法

---getStatusLine()//获得一个封装了"服务器响应请求的状态信息"的对象
---getStatusCode()//通过上述对象获得“服务器的响应码”

---getEntity()//获得服务器响应实体

静态方法



HttpPost

概述

---如果HttpClient发送请求时使用该对象作为参数则表示发送的是POST请求,该请求一般用于更新资源信息

---POST把提交的数据放置在HTTP包的包体中,也就是HttpEntity中

成员变量


构造方法

---HttpPost()//构造一个GET请求,需要一个WEB地址作为参数

普通方法

---setEntity(Params)//设置请求参数

静态方法


NameValuePair

概述

---发送HttpPost请求需要通过该对象封装请求参数,一个该对象代表一个键值对形式的参数


成员变量


构造方法

------new BasicNameValuePair(key,value)

普通方法

静态方法



HttpEntity

概述

---该类用来封装客户端与服务端通信过程中的数据流


成员变量


构造方法

---HttpResponse.getEntity()
---new UrlEncodedFormEntity(params,"utf-8");//封装Post请求的参数和字符集编码,参1是持有NameValuePair参数对象的容器,参二是字符集编码

普通方法

---getContent()//获得服务器返回的数据流

静态方法

---EntityUtils.toString(HttpEntity)//该方法可直接将一个HttpEntity对象中封装的数据流解析成字符串数据


总结

---GET

----1,首先我们需要一个客户端用来连接服务器,new DefaultHttpClient(),2,然后需要告诉客户端我们要访问服务器里的哪个文件并且以哪种方式去访问,new HttpGet(URL)。3,现在就可以连接并访问服务器,HttpClient.execute(HttpGet),服务器会返回它的响应信息,请求方法会自动将这些信息封装到HttpResponse中并返回。数据已经拿到了,至此就没有服务器和客户端卵事了。

---POST

----同上,HttpGet自然是要改成HttpPost。如果你需要向服务器传递参数的话:首先构造封装了参数的对象,new BasicNameValuePair(key,value),一个对象只能保存一组键值对。然后将该对象保存到容器中,new ArrayList<NameValuePair>().add(参数对象),再将容器封装到HttpEntity中,new new UrlEncodedFormEntity(容器对象,"utf-8")。最后,HttpPost出场包了她们,HttpPost.setEntity(HttpEntity)。


二,通过Apache接口访问网络实例

1,首先在你的服务器里放个用来被访问的web文件

<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<html>  
<head>  
<title>  
Http Test  
</title>  
</head>  
<body>  
<%  
String type = request.getParameter("parameter");  
String result = new String(type.getBytes("iso-8859-1"),"utf-8");  
out.println("<h1>" + result + "</h1>");  
%>  
</body>  
</html>  

2,Android端代码

public class MainActivity extends Activity {



Handler han=new Handler(){
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case 1:
tv.setText(msg.obj.toString());
break;
case 2:
tv.setText(msg.obj.toString());
break;
}
}
};

TextView  tv;
EditText  et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.t1);
et=(EditText) findViewById(R.id.et);
}


public void get(View view){
String param=et.getText().toString();
if(TextUtils.isEmpty(param)){
param="空";
}
new th1(param);
}
public void post(View view){
String param=et.getText().toString();
if(TextUtils.isEmpty(param)){
param="空";
}
new th2(param);
}

class th1 extends Thread{

String params="";
public th1(String pa){
this.params=pa;
this.start();
}

@Override
public void run() {
// TODO Auto-generated method stub
super.run();
HttpClient client=new DefaultHttpClient();
HttpGet get=new HttpGet("http://11.67.0.58:8080/nihao/map.jsp?parameter="+params);
try {
//发送请求并获取响应信息
HttpResponse request=client.execute(get);
//判断请求是否成功
if(request.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//请求成功后获取响应实体
HttpEntity entity=request.getEntity();
//解析服务器返回的数据流
InputStream is=entity.getContent();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
StringBuffer sb=new StringBuffer();
String dataLine="";
while((dataLine=br.readLine())!=null){
sb.append(dataLine);
}
Message msg=han.obtainMessage();
   msg.what=1;
   msg.obj=sb.toString();
   han.sendMessage(msg);
   
   br.close();  
  }

} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());

}
}

class th2 extends Thread{
   String param="";
public th2(String pa){
param=pa;
this.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
HttpClient client=new DefaultHttpClient();
HttpPost post=new HttpPost("http://11.67.0.58:8080/nihao/map.jsp");

//构造参数对象
List<NameValuePair> params=new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("parameter",param));
HttpEntity entity;
try {
entity = new UrlEncodedFormEntity(params,"utf-8");
post.setEntity(entity);
HttpResponse response=client.execute(post);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

InputStream is=entity.getContent();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
StringBuffer sb=new StringBuffer();
String dataLine="";
while((dataLine=br.readLine())!=null){
sb.append(dataLine);
}
Message msg=han.obtainMessage();
   msg.what=2;
   msg.obj=sb.toString();
   han.sendMessage(msg);
   
   br.close();  
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
   
}

Android网络编程之Apache接口

标签:

原文地址:http://blog.csdn.net/zw901159/article/details/51337004

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!