文档章节

Android客户端通过GET和POST向服务器发送数据

ht896632
 ht896632
发布于 2016/03/02 14:07
字数 619
阅读 14
收藏 0
点赞 1
评论 0

在进行开发之前,需要先了解HTTP协议及网络编程方面的知识。

Android

1.业务层类,通过使用android内置HttpClient发送GET、POST请求

/**
	 * 通过HttpClient发送Post请求
	 * @param path 请求路径
	 * @param params 请求参数
	 * @param ecoding 请求编码
	 * @return 请求是否成功
	 */
	private static boolean sendHttpClientPOSTRequest(String path,
			Map<String, String> params, String ecoding) throws Exception {
		List<NameValuePair> pair=new ArrayList<NameValuePair>();//存放请求参数
		if(params!=null && !params.isEmpty()){
			for (Map.Entry<String, String> entry : params.entrySet()) {
				pair.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));
			}
		}
		UrlEncodedFormEntity enFormEntity=new UrlEncodedFormEntity(pair,ecoding);
		HttpPost httpPost=new HttpPost(path);
		httpPost.setEntity(enFormEntity);
		DefaultHttpClient client=new DefaultHttpClient();
		HttpResponse response=client.execute(httpPost);
		if(response.getStatusLine().getStatusCode()==200){
			return true;
		}
		return false;
	}
	
	/**
	 * 通过HttpClient发送GET请求
	 * @param path 请求路径
	 * @param params 请求参数
	 * @param ecoding 请求编码
	 * @return 请求是否成功
	 */
	private static boolean sendHttpClientGETRequest(String path,
			Map<String, String> params, String ecoding) throws Exception {
		StringBuilder url=new StringBuilder(path);
		url.append("?");
		for (Map.Entry<String, String> entry : params.entrySet()) {
			url.append(entry.getKey()).append("=");
			url.append(URLEncoder.encode(entry.getValue(),ecoding));
			url.append("&");
		}
		url.deleteCharAt(url.length()-1);
		HttpGet httpGet=new HttpGet(url.toString());
		DefaultHttpClient client=new DefaultHttpClient();
		HttpResponse response=client.execute(httpGet);
		if(response.getStatusLine().getStatusCode()==200){
			//接收返回的响应结果,也可以不接收
			HttpEntity entity=response.getEntity();
			EntityUtils.toString(entity,ecoding);//对响应结果进行编码
			return true;
		}
		return false;
	}
2.通过HTTP协议手动方式进行发送GET、POST请求

/**
	 * 发送POST请求
	 * @param path 请求路径
	 * @param params 请求参数
	 * @param ecoding 请求编码
	 * @return 请求是否成功
	 */
	private static boolean sendPOSTRequest(String path,
			Map<String, String> params, String ecoding) throws Exception {
		//title=kaka&timelength=10
		//组拼实体数据
		StringBuilder data=new StringBuilder();
		if(params!=null && !params.isEmpty()){
			for (Map.Entry<String, String> entry : params.entrySet()) {
				data.append(entry.getKey()).append("=");
				data.append(URLEncoder.encode(entry.getValue(),ecoding));
				data.append("&");
			}
			data.deleteCharAt(data.length()-1);
		}
		byte[] entity=data.toString().getBytes();//得到实体数据
		HttpURLConnection conn=(HttpURLConnection)new URL(path).openConnection();
		conn.setConnectTimeout(5000);
		conn.setRequestMethod("POST");
		conn.setDoOutput(true);//设置允许对外输出数据
		//设置头字段
		conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
		OutputStream outStream=conn.getOutputStream();
		outStream.write(entity);
		if(conn.getResponseCode()==200){
			return true;
		}
		return false;
	}

	/**
	 * 发送GET请求
	 * @param path 请求路径
	 * @param params 请求参数
	 * @param ecoding 请求编码
	 * @return 请求是否成功
	 */
	private static boolean sendGETRequest(String path,Map<String, String> params,String ecoding) throws Exception {
		StringBuilder url=new StringBuilder(path);
		url.append("?");
		for (Map.Entry<String, String> entry : params.entrySet()) {
			url.append(entry.getKey()).append("=");
			url.append(URLEncoder.encode(entry.getValue(),ecoding));
			url.append("&");
		}
		url.deleteCharAt(url.length()-1);
		HttpURLConnection conn=(HttpURLConnection)new URL(url.toString()).openConnection();
		conn.setConnectTimeout(5000);
		conn.setRequestMethod("GET");
		if(conn.getResponseCode()==200){
			return true;
		}
		return false;
	}
3.调用示例

/**
	 * 调用示例保存数据
	 * @param title 标题
	 * @param length 时长
	 * @return
	 */
	public static boolean save(String title, String length) {
		String path="http://192.168.1.111:8080/ManageServlet";//服务器路径
		Map<String, String> params=new HashMap<String, String>();
		params.put("title", title);
		params.put("timelength", length);
		try {
			return sendHttpClientGETRequest(path,params,"UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
源码下载地址: Android客户端通过GET和POST向服务器发送数据源码


© 著作权归作者所有

共有 人打赏支持
ht896632
粉丝 35
博文 53
码字总数 31361
作品 0
闵行
高级程序员
Android操作HTTP实现与服务器通信

本示例以Servlet为例,演示Android与Servlet的通信。 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式。至于Socket通信会在以后的...

坚持自己
2013/03/28
0
0
Android 服务器推送技术

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比...

晨曦之光
2012/03/15
0
6
Android推送通知指南

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户 端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对...

LiSteven
2013/03/28
0
0
说说在 Android 中如何发送 HTTP 请求

客户端会向服务器发出一条 HTTP 请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对这些数据进行解析与处理。 1 HttpURLConnection 可以使用 HttpURLConnection(官方推荐) 来发...

deniro
06/09
0
0
Android http中文乱码问题

总结下android下的中文乱码问题,以后开发东西基本就在这里写了。一是通过javaeye能认识不少朋友。二是对自己的博客内容进行管理。三是平时日志在sina的博客里写吧。 一 url to android JAV...

xiahuawuyu
2012/10/11
0
0
Android消息推送完美方案

推送功能在手机应用开发中越来越重要,已经成为手机开发的必须。在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折。本文就是用来和大家共同探讨一种Android消息...

Yujan
2014/04/10
0
0
Android客户端与服务器交互方式-小结

最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件...

x-knight_勋爵
2016/04/18
0
0
Android push (一):SMS push

Android push (一):SMS push 移动终端为了节省电量和网络流量,不再采用轮训服务器的方式来收集数据,而是在服务器有数据需要发送到终端时通知终端。我们称这种机制叫推送(push)。终端接...

LiSteven
2013/06/04
0
1
http服务器如何判断app是否正确接收了数据(web.py)

用web.py做了一个简单的http服务器,为android应用app提供服务。服务器端有没有办法判断,客户端app是否正确接收了数据。 比如,客户端app用post向服务器提交一些数据,当这个post请求有了正...

kyle960
05/15
0
0
基于Android移动平台僵尸网络模拟工具设计与实现

移动端:基于Android系统开发的应用,表层应用是基于baiduMap 路线规划app 服务端:基于python web 开发框架 django 实现。 通信信道:基于第三方SDK Jpush推送消息+自己一套加密系统 推送原...

颓废的幻想者
2015/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA @MappedSuperclass 注解说明

基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。 1.@MappedSuperclass注解只能标准在类上:@Target({java.lang....

海博1600
14分钟前
0
0
Scala Configuration 相关API

Play使用了 Typesafe config library,但是也提供了一个有着更多Scala高级特性的的 Configuration 封装。不熟悉Typesafe配置的开发者可以移步 configuration文件的语法和特性文档。 读取配置...

Landas
今天
1
0
使用cookie技术 记住账号

1. 效果 2. 实现过程 2.1 前端 将用户的选中传递给后台 这个参数的获取是 参考:https://my.oschina.net/springMVCAndspring/blog/1860498 // var rememberLogin = $("#rememberLoginId").i...

Lucky_Me
今天
1
0
《趣谈网络协议》02之网络分层的真实含义

一、提出问题 1.提出问题 当你听到什么二层设备、三层设备、四层 LB 和七层 LB 中层的时候,是否有点一头雾水,不知道这些所谓的层,对应的各种协议具体要做什么“工作”? 2.这四个问题你弄...

aibinxiao
今天
2
0
Python3学习日志二 Python中的集合set和字典dict

1.集合set 定义一个集合set 我们可以看到定义集合set有两种不同的形式,如果要定义一个空的集合set不能用{}而是要用set();另外,集合是无序的,而且set中的元素是不可重复的,如果你定义了一...

Mr_bullshit
今天
0
0
adb 操作指令详解

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。...

孟飞阳
今天
0
0
nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
今天
1
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
今天
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
今天
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部