为了避免繁琐的HttpUrlConnection配置,SDK提供了HttpClient。其中将GET方法链接封装成了HttpGet类,将POST方法封装成HttpPost类。
get连接
get连接的步骤如下:
1. 新建url
2. 新建get型请求
3. 新建Http客户端
4. 使用客户端执行请求
5. 处理返回的结果
post连接
post连接和get连接不同之处就是参数的传递,在post中传递参数需要使用NameValuePair类。
post连接的步骤如下:
1. 新建HttpPost类型的请求
2. 新建保存参数的数据结构
3. 为参数设置编码方式
4. 将参数添加到请求中
5. 新建Http客户端
6. 使用客户端执行请求
7. 处理响应
HttpClient实例
注意:android4.0以后实现网络请求操作必不能在主线程中运行,故采用新建线程调用get和post方法,其次级线程得到的数据通过handler接受message消息传递到主线程。
另外在注册文件中需要添加 INTERNET权限。
public class MainActivity extends Activity {
TextView tv;
Button get;
Button post;
Handler handler;//处理器接收消息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.textView2);
get=(Button)findViewById(R.id.get);
post=(Button)findViewById(R.id.post);
//接受传递过来的消息,并显示出来
handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) { //msg.what是消息标签,标识各消息
case 1:
//在这里可以进行UI操作
//对msg.obj进行String强制转换
String string=(String)msg.obj;
tv.setText(string);
break;
case 2:
String string2=(String)msg.obj;
tv.setText(string2);
break;
default:
break;
}
}
};
OnClickListener listener=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
int id=v.getId();
if(id==R.id.get){
//新建线程调用方法
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
doGet();
}
});
thread.start();
}
else
{
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
doPost();
}
});
thread.start();
}
}
};
get.setOnClickListener(listener);
post.setOnClickListener(listener);
}
public void doGet(){
String url="http://www.baidu.com";
//新建get型请求
HttpGet httpRequest=new HttpGet(url);
//新建Http客户端
HttpClient httpClient=new DefaultHttpClient();
try
{
//执行请求返回结果
HttpResponse httpResponse=httpClient.execute(httpRequest);
//判断结果状态
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{
//得到结果内容
String result=EntityUtils.toString(httpResponse.getEntity());
//发送消息
Message message = new Message();
message.what = 1;
message.obj=result;
handler.sendMessage(message);
// tv.setText(result);
}
else
{
return;
}
}
catch(ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(){
String url="http://www.baidu.com";
//新建post类型请求
HttpPost httpRequest=new HttpPost(url);
//新建需要传递参数的数据结构
List<NameValuePair> params=new ArrayList<NameValuePair>();
//新建键值对
BasicNameValuePair pair1=new BasicNameValuePair("param", "AaBb");
params.add(pair1);
try{
//设置编码方式
HttpEntity entity=new UrlEncodedFormEntity(params, HTTP.UTF_8);
httpRequest.setEntity(entity);
//新建http客户端
HttpClient client=new DefaultHttpClient();
//执行请求得到的响应
HttpResponse httpResponse=client.execute(httpRequest);
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK);
{
String result=EntityUtils.toString(httpResponse.getEntity());
Message message=new Message();
message.what=2;
message.obj=result;
handler.sendMessage(message);
}
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
catch (ClientProtocolException e) {
// TODO: handle exception
e.printStackTrace();
}
catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
get方式
post方式