HttpClient 可以完成和 HttpURLConnection 几乎一模一样的效果,但两者之间的用法却有较
大的差别,用法如下,直接贴代码了,在布局文件中是一个按钮和一个TextView,按钮用来发送请求,TextView用来接收服务器返回的消息:
public class SecondActivity extends Activity implements OnClickListener{
public static final int SHOW_RESPONSE = 0;
private Button httpclient_send_request;
private TextView httpclient_responseText;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_RESPONSE:
String response = (String) msg.obj;
// 在这里进行UI操作,将结果显示到界面上
httpclient_responseText.setText(response);
}
}
};
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
httpclient_send_request = (Button) findViewById(R.id.httpclient_send_request);
httpclient_responseText = (TextView) findViewById(R.id.tv_httpclient_response);
httpclient_send_request.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.httpclient_send_request){
sendRequestWithHttpClient();
}
}
// TODO Auto-generated method stub
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
try {
// 1,首先,HttpClient 是一个接口,因此无法创建它的实例,通常情况下都会创
// 建一个 DefaultHttpClient 的实例
HttpClient httpclient = new DefaultHttpClient();
// 2,想要发起一条 GET 请求,就可以创建一个 HttpGet 对象,并传入目标的网络
// 地址,然后调用 HttpClient 的 execute()方法
HttpGet httpGet = new HttpGet(" http://www.baidu.com ");
// 3,调用 HttpClient 的 execute()方法,传入HttpGet或HttpPost对象,得到HttpResponse对象
HttpResponse httpResponse = httpclient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 4,等于200说明请求和响应都成功了
// 5,调用 getEntity()方法获取到一个 HttpEntity 实例
HttpEntity entity = httpResponse.getEntity();
// 6,调用 EntityUtils.toString()这个静态方法将 HttpEntity 转换成字符串
String response = EntityUtils.toString(entity,"utf-8");
Message message = new Message();
message.what = SHOW_RESPONSE;
// 将服务器返回的结果存放到Message
message.obj = response.toString();
handler.sendMessage(message);
}
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}
代码的具体解释都在注释中说明,注意
第二步代码中给的是GET请求,若为POST请求,则第二步要相应的变化为如下:
然后通过一个 NameValuePair 集合来存放待提交的参数,并将这个参数集合传入到一个
UrlEncodedFormEntity中,然后调用 HttpPost的 setEntity()方法将构建好的 UrlEncodedFormEntity
传入,如下所示:
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
httpPost.setEntity(entity);
接下来的操作就和 HttpGet 一样了,调用 HttpClient 的 execute()方法,并将 HttpPost 对
象传入即可:
httpClient.execute(httpPost);
本文很多内柔源自书本,仅供学习之用。共同进步。