Android网络请求工具类
2015-08-06 16:48
267 查看
半个月前,让给公司一个新模块建个项目,到现在这个项目结构还是有很多不足的地方。比如说数据的本地缓存还有挺多的问题。
今天后台服务器的接口崩的很厉害,完全取不到数据,任务里还有一个小模块的UI设计跟数据也不匹配只能先放着了 ,来写几篇blog吧
说了点废话,开始主题吧:
如今移动APP项目中几乎没有不用网络的吧,所以一个获取json数据的网络工具类必不可少。
而网络请求工具类的功能就是封装 几个请求的方法,一般常用的有get,post等。(delete及其他都没用过……)
POST请求(常用):
POST请求有很多优点,一来它很少产生乱码,它用实体保存你给的参数,也要比GET方法安全得多。但是有一些请求是不兼容POST的,所以GET方法还是有必要的。
今天后台服务器的接口崩的很厉害,完全取不到数据,任务里还有一个小模块的UI设计跟数据也不匹配只能先放着了 ,来写几篇blog吧
说了点废话,开始主题吧:
如今移动APP项目中几乎没有不用网络的吧,所以一个获取json数据的网络工具类必不可少。
而网络请求工具类的功能就是封装 几个请求的方法,一般常用的有get,post等。(delete及其他都没用过……)
POST请求(常用):
/** * 用来获取服务端响应信息 * * @param url * 请求服务端地址 * @param params * 请求参数:以键值对方式保存 * @return String 返回对应的JSON字符串 * @throws */ public static String getJSONData(String url, HashMap<String, String> params) { HttpPost post = new HttpPost(url); HttpClient httpclient = new DefaultHttpClient(); // 请求超时 httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, StringConstant.CONNECTION_TIME_OUT); // 读取超时 httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, StringConstant.READ_TIME_OUT); ArrayList<NameValuePair> paramPairs = new ArrayList<NameValuePair>(); if (params != null && !params.isEmpty()) {// 判断params请求参数是否为空 for (Entry<String, String> entry : params.entrySet()) {// 如果不为空的话, // 需要迭代,加入到ArrayList<NameValuePair>对象中 paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } } try { post.setEntity(new UrlEncodedFormEntity(paramPairs,StringConstant.HTTP_UTF8)); } catch (UnsupportedEncodingException e) { Log.d("HttpDataUtilexception", e.getMessage()); return null; } try { HttpResponse response; // 执行请求,获取响应 response = httpclient.execute(post); String inf = ""; int code = response.getStatusLine().getStatusCode(); Log.d("code", code+""); if (code == StringConstant.RESPONSE_CODE) {// 判断响应状态码 inf = EntityUtils.toString(response.getEntity()); // Log.d("result", "result:" + inf); return inf; } } catch (Exception e) { e.printStackTrace(); } return null; }
POST请求有很多优点,一来它很少产生乱码,它用实体保存你给的参数,也要比GET方法安全得多。但是有一些请求是不兼容POST的,所以GET方法还是有必要的。
/** * get 请求 * @param url * @param params * @return */ public static String HttpDataforGet(String url, HashMap<String, String> params) { HttpClient httpclient = new DefaultHttpClient(); // 请求超时 httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, StringConstant.CONNECTION_TIME_OUT); // 读取超时 httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, StringConstant.READ_TIME_OUT); StringBuffer sbu = new StringBuffer(); if (params != null && !params.isEmpty()) {// 判断params请求参数是否为空 for (Entry<String, String> entry : params.entrySet()) {// 如果不为空的话, try { //将参数转化为utf-8,并将 +号 转化回 =号 sbu.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8").replace("+", "%2B")).append("&"); }catch(Exception e) { e.printStackTrace(); } } url += sbu.toString(); } try { HttpGet get = new HttpGet(url); HttpResponse response; // 执行请求,获取响应 response = httpclient.execute(get); String inf = ""; int code = response.getStatusLine().getStatusCode(); Log.d("code", code+""); if (code == StringConstant.RESPONSE_CODE) {// 判断响应状态码 inf = EntityUtils.toString(response.getEntity()); // Log.d("result", "result:" + inf); return inf; } } catch (Exception e) { e.printStackTrace(); } return null; }
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- HTTP协议详解
- 怎样使用NetFlow分析网络异常流量一
- Linux IO多路复用之epoll网络编程(含源码)
- 请求网络数据的url中带有汉字的解决办法
- HTTP与HTTPS的区别
- [Java Web]Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors
- TCP中的RST复位信号
- http协议分析
- HttpClient
- HTTP Basic Authentication in JMeter
- 网络协议 之 邮件协议
- 在网络通讯中应用Protobuf
- 【linux高级程序设计】(第十五章)UDP网络编程应用 3
- 黑马程序员——java高新技术——网络编程
- 【Apache学习】编译安装httpd2.4 含傻瓜版自动安装脚本
- CDN(内容分发网络)技术原理
- Qt QTcpServer/QTcpSocke
- IOS(SystemConfiguration)框架中关于测试连接网络状态相关方法
- 使用HttpClient实现文件的上传下载