android菜鸟进阶之路—— HttpClient 的实例
2015-09-07 22:35
633 查看
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);
}
}
};
@Override
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);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.httpclient_send_request){
sendRequestWithHttpClient();
}
}
private void 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请求,则第二步要相应的变化为如下:
HttpPost httpPost = new HttpPost("http://www.baidu.com");
然后通过一个 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);
本文很多内柔源自书本,仅供学习之用。共同进步。
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);
}
}
};
@Override
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);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.httpclient_send_request){
sendRequestWithHttpClient();
}
}
private void 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请求,则第二步要相应的变化为如下:
HttpPost httpPost = new HttpPost("http://www.baidu.com");
然后通过一个 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);
本文很多内柔源自书本,仅供学习之用。共同进步。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories