android中使用httpclient提交表单
2016-07-29 00:00
351 查看
在android开发中如果我们需要和服务器端交互的时候已经使用apache client项目进行表单的模拟提交。通过返回json对象进而来达到数据的提交与取回,同时又能保证session的有效性以及系统的安全性,这里我封装了一下httpclient的get和post方式来提交数据
需要说明的是,这个一般不能直接在主线程来做这个动作,这样会因为网络问题造成主线程假死。手机客户端的UI卡掉
一般我都是异步进行数据的调用
/** * */ package com.jiuchongju.util; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; /** * Description: * @version 1.0 */ public class HttpUtil { // 创建HttpClient对象 public static HttpClient httpClient ; public static final String BASE_URL = "http://www.xxx.com/projectname/name_baidu!jsonstring"; /** * * @param url 发送请求的URL * @return 服务器响应字符串 * @throws Exception */ public static String getRequest(String url) throws Exception { httpClient= new DefaultHttpClient(); try{ // 创建HttpGet对象。 HttpGet get = new HttpGet(url); // 发送GET请求 HttpResponse httpResponse = httpClient.execute(get); // 如果服务器成功地返回响应 if (httpResponse.getStatusLine() .getStatusCode() == 200) { // 获取服务器响应字符串 String result = EntityUtils .toString(httpResponse.getEntity()); return result; } }catch(Exception e){ e.printStackTrace(); return "获取数据失败!"; }finally{ httpClient.getConnectionManager().shutdown(); } return null; } /** * * @param url 发送请求的URL * @param params 请求参数 * @return 服务器响应字符串 * @throws Exception */ public static String postRequest(String url , Map<String ,String> rawParams) { httpClient= new DefaultHttpClient(); try{ // 创建HttpPost对象。 HttpPost post = new HttpPost(url); // 如果传递参数个数比较多的话可以对传递的参数进行封装 List<NameValuePair> params = new ArrayList<NameValuePair>(); for(String key : rawParams.keySet()) { //封装请求参数 params.add(new BasicNameValuePair(key , rawParams.get(key))); } // 设置请求参数 post.setEntity(new UrlEncodedFormEntity( params,HTTP.UTF_8)); // 发送POST请求 HttpResponse httpResponse = httpClient.execute(post); // 如果服务器成功地返回响应 if (httpResponse.getStatusLine() .getStatusCode() == 200) { // 获取服务器响应字符串 String result = EntityUtils .toString(httpResponse.getEntity()); return result; } }catch(Exception e){ e.printStackTrace(); }finally{ httpClient.getConnectionManager().shutdown(); } return null; } }
需要说明的是,这个一般不能直接在主线程来做这个动作,这样会因为网络问题造成主线程假死。手机客户端的UI卡掉
一般我都是异步进行数据的调用
相关文章推荐
- 应用层协议实现系列(二)——HTTP服务器之http协议解析
- 应用层协议实现系列(一)——HTTP服务器之仿nginx多进程和多路IO的实现
- 如何开启nginx 的https服务
- Linux 修改IP地址DNS服务器等网络设置
- Windows 7下笔记本无线网络共享
- Linux网络编程10——使用UDP实现五子棋对战
- Linux网络编程8——对TCP与UDP的简易封装
- Linux网络编程9——对TCP与UDP的简易封装2.0
- Introduction to Computer Networks(网络架构与七层参考模式)
- 网络熟知端口号
- Linux网络编程4——个人总结
- Linux网络编程3——socket
- 浏览器的工作原理:现代网络浏览器幕后揭秘
- 机器学习之神经网络模型-上(Neural Networks: Representation)
- Linux网络编程1——小端模式与大端模式
- Linux网络编程2——系统函数
- Linux网络编程5——使用UDP协议实现群聊
- 网络IO模型
- 机器学习之神经网络模型-下(Neural Networks: Representation)
- Linux网络编程6——使用TCP实现文件服务器