Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法。

Java代码
  1. /**
  2. *@authorDylan
  3. *本类封装了Android中向web服务器提交数据的两种方式四种方法
  4. */
  5. publicclassSubmitDataByHttpClientAndOrdinaryWay{
  6. /**
  7. *使用get请求以普通方式提交数据
  8. *@parammap传递进来的数据,以map的形式进行了封装
  9. *@parampath要求服务器servlet的地址
  10. *@return返回的boolean类型的参数
  11. *@throwsException
  12. */
  13. publicBooleansubmitDataByDoGet(Map<String,String>map,Stringpath)throwsException{
  14. //拼凑出请求地址
  15. StringBuildersb=newStringBuilder(path);
  16. sb.append("?");
  17. for(Map.Entry<String,String>entry:map.entrySet()){
  18. sb.append(entry.getKey()).append("=").append(entry.getValue());
  19. sb.append("&");
  20. }
  21. sb.deleteCharAt(sb.length()-1);
  22. Stringstr=sb.toString();
  23. System.out.println(str);
  24. URLUrl=newURL(str);
  25. HttpURLConnectionHttpConn=(HttpURLConnection)Url.openConnection();
  26. HttpConn.setRequestMethod("GET");
  27. HttpConn.setReadTimeout(5000);
  28. //GET方式的请求不用设置什么DoOutPut()之类的吗?
  29. if(HttpConn.getResponseCode()==HttpURLConnection.HTTP_OK){
  30. returntrue;
  31. }
  32. returnfalse;
  33. }
  34. /**
  35. *普通方式的DoPost请求提交数据
  36. *@parammap传递进来的数据,以map的形式进行了封装
  37. *@parampath要求服务器servlet的地址
  38. *@return返回的boolean类型的参数
  39. *@throwsException
  40. */
  41. publicBooleansubmitDataByDoPost(Map<String,String>map,Stringpath)throwsException{
  42. //注意Post地址中是不带参数的,所以newURL的时候要注意不能加上后面的参数
  43. URLUrl=newURL(path);
  44. //Post方式提交的时候参数和URL是分开提交的,参数形式是这样子的:name=y&age=6
  45. StringBuildersb=newStringBuilder();
  46. //sb.append("?");
  47. for(Map.Entry<String,String>entry:map.entrySet()){
  48. sb.append(entry.getKey()).append("=").append(entry.getValue());
  49. sb.append("&");
  50. }
  51. sb.deleteCharAt(sb.length()-1);
  52. Stringstr=sb.toString();
  53. HttpURLConnectionHttpConn=(HttpURLConnection)Url.openConnection();
  54. HttpConn.setRequestMethod("POST");
  55. HttpConn.setReadTimeout(5000);
  56. HttpConn.setDoOutput(true);
  57. HttpConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
  58. HttpConn.setRequestProperty("Content-Length",String.valueOf(str.getBytes().length));
  59. OutputStreamos=HttpConn.getOutputStream();
  60. os.write(str.getBytes());
  61. if(HttpConn.getResponseCode()==HttpURLConnection.HTTP_OK){
  62. returntrue;
  63. }
  64. returnfalse;
  65. }
  66. /**
  67. *以HttpClient的DoGet方式向服务器发送请数据
  68. *@parammap传递进来的数据,以map的形式进行了封装
  69. *@parampath要求服务器servlet的地址
  70. *@return返回的boolean类型的参数
  71. *@throwsException
  72. */
  73. publicBooleansubmitDataByHttpClientDoGet(Map<String,String>map,Stringpath)throwsException{
  74. HttpClienthc=newDefaultHttpClient();
  75. //请求路径
  76. StringBuildersb=newStringBuilder(path);
  77. sb.append("?");
  78. for(Map.Entry<String,String>entry:map.entrySet()){
  79. sb.append(entry.getKey()).append("=").append(entry.getValue());
  80. sb.append("&");
  81. }
  82. sb.deleteCharAt(sb.length()-1);
  83. Stringstr=sb.toString();
  84. System.out.println(str);
  85. HttpGetrequest=newHttpGet(sb.toString());
  86. HttpResponseresponse=hc.execute(request);
  87. if(response.getStatusLine().getStatusCode()==HttpURLConnection.HTTP_OK){
  88. returntrue;
  89. }
  90. returnfalse;
  91. }
  92. /**
  93. *以HttpClient的DoPost方式提交数据到服务器
  94. *@parammap传递进来的数据,以map的形式进行了封装
  95. *@parampath要求服务器servlet的地址
  96. *@return返回的boolean类型的参数
  97. *@throwsException
  98. */
  99. publicBooleansubmintDataByHttpClientDoPost(Map<String,String>map,Stringpath)throwsException{
  100. //1.获得一个相当于浏览器对象HttpClient,使用这个接口的实现类来创建对象,DefaultHttpClient
  101. HttpClienthc=newDefaultHttpClient();
  102. //DoPost方式请求的时候设置请求,关键是路径
  103. HttpPostrequest=newHttpPost(path);
  104. //2.为请求设置请求参数,也即是将要上传到web服务器上的参数
  105. List<NameValuePair>parameters=newArrayList<NameValuePair>();
  106. for(Map.Entry<String,String>entry:map.entrySet()){
  107. NameValuePairnameValuePairs=newBasicNameValuePair(entry.getKey(),entry.getValue());
  108. parameters.add(nameValuePairs);
  109. }
  110. //请求实体HttpEntity也是一个接口,我们用它的实现类UrlEncodedFormEntity来创建对象,注意后面一个String类型的参数是用来指定编码的
  111. HttpEntityentity=newUrlEncodedFormEntity(parameters,"UTF-8");
  112. request.setEntity(entity);
  113. //3.执行请求
  114. HttpResponseresponse=hc.execute(request);
  115. //4.通过返回码来判断请求成功与否
  116. if(response.getStatusLine().getStatusCode()==HttpURLConnection.HTTP_OK){
  117. returntrue;
  118. }
  119. returnfalse;
  120. }
  121. }


更多相关文章

  1. 【android】Cursor记录集游标、ListView和SimpleCursorAdapter、
  2. 【Android开发学习07】存储简单数据的利器--Preferences
  3. android 数据库建立以及自定义ContentProvider
  4. android 客户端与服务端的通信 发送get和post请求并获取数据
  5. Android SQLite 数据库 增删改查操作
  6. android 存储数据与文件
  7. Android设备上i-jetty环境的搭建-手机上的web服务器
  8. Android读取JSON格式数据
  9. Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)

随机推荐

  1. 【Android API指南】App组件(1) - 应用程
  2. IDC:今年Android平板电脑出货量将首超iPad
  3. Android实现ProgressBar旋转菊花加载的动
  4. Android Animation动画详解(二): 组合动画特
  5. Android学习路线(十六)支持不同设备
  6. Android使用NFC模拟M卡实现 (二)
  7. android XML动画初步解析(activity界面之
  8. [知识] ADB工具(Android(安卓)Debug Brid
  9. CVE-2015-3636 Android内核 UAF漏洞分析
  10. Android 解决图片大量下载:软引用必须懂4