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

/** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */public class SubmitDataByHttpClientAndOrdinaryWay {/** * 使用get请求以普通方式提交数据 * @param map 传递进来的数据,以map的形式进行了封装 * @param path 要求服务器servlet的地址 * @return 返回的boolean类型的参数 * @throws Exception */public Boolean submitDataByDoGet(Map<String, String> map, String path) throws Exception {// 拼凑出请求地址StringBuilder sb = new StringBuilder(path);sb.append("?");for (Map.Entry<String, String> entry : map.entrySet()) {sb.append(entry.getKey()).append("=").append(entry.getValue());sb.append("&");}sb.deleteCharAt(sb.length() - 1);String str = sb.toString();System.out.println(str);URL Url = new URL(str);HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();HttpConn.setRequestMethod("GET");HttpConn.setReadTimeout(5000);// GET方式的请求不用设置什么DoOutPut()之类的吗?if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {return true;}return false;}/** * 普通方式的DoPost请求提交数据 * @param map 传递进来的数据,以map的形式进行了封装 * @param path 要求服务器servlet的地址 * @return 返回的boolean类型的参数 * @throws Exception */public Boolean submitDataByDoPost(Map<String, String> map, String path) throws Exception {// 注意Post地址中是不带参数的,所以newURL的时候要注意不能加上后面的参数URL Url = new URL(path);// Post方式提交的时候参数和URL是分开提交的,参数形式是这样子的:name=y&age=6StringBuilder sb = new StringBuilder();// sb.append("?");for (Map.Entry<String, String> entry : map.entrySet()) {sb.append(entry.getKey()).append("=").append(entry.getValue());sb.append("&");}sb.deleteCharAt(sb.length() - 1);String str = sb.toString();HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();HttpConn.setRequestMethod("POST");HttpConn.setReadTimeout(5000);HttpConn.setDoOutput(true);HttpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");HttpConn.setRequestProperty("Content-Length", String.valueOf(str.getBytes().length));OutputStream os = HttpConn.getOutputStream();os.write(str.getBytes());if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {return true;}return false;}/** * 以HttpClient的DoGet方式向服务器发送请数据 * @param map 传递进来的数据,以map的形式进行了封装 * @param path 要求服务器servlet的地址 * @return 返回的boolean类型的参数 * @throws Exception */public Boolean submitDataByHttpClientDoGet(Map<String, String> map, String path) throws Exception {HttpClient hc = new DefaultHttpClient();// 请求路径StringBuilder sb = new StringBuilder(path);sb.append("?");for (Map.Entry<String, String> entry : map.entrySet()) {sb.append(entry.getKey()).append("=").append(entry.getValue());sb.append("&");}sb.deleteCharAt(sb.length() - 1);String str = sb.toString();System.out.println(str);HttpGet request = new HttpGet(sb.toString());HttpResponse response = hc.execute(request);if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {return true;}return false;}/** * 以HttpClient的DoPost方式提交数据到服务器 * @param map 传递进来的数据,以map的形式进行了封装 * @param path 要求服务器servlet的地址 * @return 返回的boolean类型的参数 * @throws Exception */public Boolean submintDataByHttpClientDoPost(Map<String, String> map, String path) throws Exception {// 1. 获得一个相当于浏览器对象HttpClient,使用这个接口的实现类来创建对象,DefaultHttpClientHttpClient hc = new DefaultHttpClient();// DoPost方式请求的时候设置请求,关键是路径HttpPost request = new HttpPost(path);// 2. 为请求设置请求参数,也即是将要上传到web服务器上的参数List<NameValuePair> parameters = new ArrayList<NameValuePair>();for (Map.Entry<String, String> entry : map.entrySet()) {NameValuePair nameValuePairs = new BasicNameValuePair(entry.getKey(), entry.getValue());parameters.add(nameValuePairs);}// 请求实体HttpEntity也是一个接口,我们用它的实现类UrlEncodedFormEntity来创建对象,注意后面一个String类型的参数是用来指定编码的HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");request.setEntity(entity);// 3. 执行请求HttpResponse response = hc.execute(request);// 4. 通过返回码来判断请求成功与否if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {return true;}return false;}}

更多相关文章

  1. Android 数据存储之SQLite数据库存储
  2. Android数据解析出错com.android.volley.NoConnectionError: jav
  3. 引用第三方进行Android前端与web后台的数据交互
  4. Android 调用UVCCamera 采集UVC摄像头数据,并调用zxing 扫码库扫
  5. android sdk 安装 连接google服务器超时
  6. 【android】SQLite数据库之SQLiteOpenHelper与SQLiteDatabase

随机推荐

  1. Android图片的固定大小显示
  2. Android(安卓)Studio cannot launch avd
  3. android有效解决加载大图片内存溢出的问
  4. Android媒体的一些使用总结
  5. EditText 设置 imeOptions 无效问题
  6. android面试题总结
  7. Android使用SQlite数据库
  8. 一分钟让你实现Android微信分享功能
  9. Android面试系列文章2018之Android部分In
  10. Android自动化测试工具——Monkey