`

Android通过http协议数据交互的两种方式

阅读更多

方式一:HttpPost(import org.apache.http.client.methods.HttpPost)

 

	private Button button1, button2, button3;
	private TextView textView1;

	button1.setOnClickListener(new Button.OnClickListener() {
		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
		// URLַ
		// String uriAPI =
		// "http://www.dubblogs.cc:8751/Android/Test/API/Post/index.php";
		String uriAPI = "http://172.20.0.206:8082//TestServelt/login.do";
		/* 建立HTTP Post连线 */
		HttpPost httpRequest = new HttpPost(uriAPI);
		// Post运作传送变数必须用NameValuePair[]阵列储存
		// 传参数 服务端获取的方法为request.getParameter("name")
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("name", "this is post"));
		try {

			// 发出HTTP request
			httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
			// 取得HTTP response
			HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);

			// 若状态码为200 ok
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				// 取出回应字串
				String strResult = EntityUtils.toString(httpResponse.getEntity());
				textView1.setText(strResult);
			} else {
				textView1.setText("Error Response" + httpResponse.getStatusLine().toString());
			}
		} catch (ClientProtocolException e) {
			textView1.setText(e.getMessage().toString());
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			textView1.setText(e.getMessage().toString());
			e.printStackTrace();
		} catch (IOException e) {
			textView1.setText(e.getMessage().toString());
			e.printStackTrace();
		}
	}

});

 

方式二:HttpURLConnection、URL(import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;)

 

private void httpUrlConnection() {
	try {
		String pathUrl = "http://172.20.0.206:8082/TestServelt/login.do";
		// 建立连接
		URL url = new URL(pathUrl);
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();

		// //设置连接属性
		httpConn.setDoOutput(true);// 使用 URL 连接进行输出
		httpConn.setDoInput(true);// 使用 URL 连接进行输入
		httpConn.setUseCaches(false);// 忽略缓存
		httpConn.setRequestMethod("POST");// 设置URL请求方法
		String requestString = "客服端要以以流方式发送到服务端的数据...";

		// 设置请求属性
		// 获得数据字节数据,请求数据流的编码,必须和下面服务器端处理请求流的编码一致
		byte[] requestStringBytes = requestString.getBytes(ENCODING_UTF_8);
		httpConn.setRequestProperty("Content-length", "" + requestStringBytes.length);
		httpConn.setRequestProperty("Content-Type", "application/octet-stream");
		httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
		httpConn.setRequestProperty("Charset", "UTF-8");
		//
		String name = URLEncoder.encode("黄武艺", "utf-8");
		httpConn.setRequestProperty("NAME", name);

		// 建立输出流,并写入数据
		OutputStream outputStream = httpConn.getOutputStream();
		outputStream.write(requestStringBytes);
		outputStream.close();
		// 获得响应状态
		int responseCode = httpConn.getResponseCode();
		if (HttpURLConnection.HTTP_OK == responseCode) {// 连接成功

			// 当正确响应时处理数据
			StringBuffer sb = new StringBuffer();
			String readLine;
			BufferedReader responseReader;
			// 处理响应流,必须与服务器响应流输出的编码一致
			responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), ENCODING_UTF_8));
			while ((readLine = responseReader.readLine()) != null) {
				sb.append(readLine).append("\n");
			}
			responseReader.close();
			tv.setText(sb.toString());
		}
	} catch (Exception ex) {
		ex.printStackTrace();
	}
}

 补充:

标准的http post传输方式,以上面为例子,如下:

requestStringBytes =“customerId=3461&nickName=黄&email=linafei1111@163.com&areaCode=0592&cityCode=350200&registerPhone=18906051120服务端通过getParamer("customerId")获取。

如果把参数值放在URL,例如http://172.20.0.206:8082/TestServelt/login.do?customerId=3461&nickName=黄&email=linafei1111@163.com&areaCode=0592&cityCode=350200&registerPhone=18906051120

虽然是以post方式传输,但是实际上还是以get方式提交

 

 

分享到:
评论
1 楼 webczw 2012-07-09  
不错,学习

相关推荐

    详解Android客户端与服务器交互方式

    最近的Android项目开发过程中一个问题困扰自己很长时间,...而下面的几种方式就是从这两种协议扩展出来的:webservices soap、SSH的JSON(可参考:该链接)、xmlrpc(wordpress for android)…… Socket 不推荐 ,HTTP

    Android中HttpURLConnection与HttpClient的使用与封装

     本文并不针对HTTP协议的具体内容,仅探讨android开发中使用HTTP协议访问网络的两种方式——HttpURLConnection和HttpClient  因为需要访问网络,需在AndroidManifest.xml中添加如下权限 &lt;uses android:name=...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android高级编程--源代码

    在每章的讲解中,它会让你通过一系列示例项目逐步掌握Android中的各种新功能和技术,助你取得最圆满的学习效果。本书所介绍的各个应用实例简明扼要且极具实用价值,它们覆盖了Android 1.0的所有基本功能和高级功能...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    (2)针对跨域数据交互问题,指出并分析了跨域缓存交互问题出现的原因,通过在HTML5存储技术的基础上,重写LocalStorage,用移动端本地的Sqlite进行数据维护,实现跨域数据交互。 (3)针对页面自适应问题,本文结合...

    精通ANDROID 3(中文版)1/2

    14.5.6 从两个位置控制唤醒锁  14.5.7 长期运行的服务的实现  14.5.8 测试长期运行的服务  14.6 代码编译说明  14.6.1 从ZIP文件创建项目  14.6.2 通过代码清单创建项目  14.7 参考资料  14.8 小结 ...

    精通Android 3 (中文版)2/2

    第1章 Android计算平台简介  1.1 面向新PC的全新平台  1.2 Android的历史  1.3 Dalvik VM剖析  1.4 理解Android软件栈  1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 ...

    JS与Native交互

    JavaScriptCore中web页面调用原生应用的方法可以用Delegate或Block两种方法。 JavaScriptCore中类及协议: JSContext:给JavaScript提供运行的上下文环境,JSContext是代表JS的执行环境,通过-evaluateScript:方法就...

    安卓GET与POST网络请求的三种方式

    HTTP协议是一款基于短连接的协议,每次交互完毕后连接断开,而HTTP请求又分为GET和POST两种方式,GET请求比较简单,只需要在网址后面用?拼接请求的资源路径,如百度图片输入动漫关键字的地址 ht

    智能家居物联网实验室建设方案.doc

    我们可以通过几种方式去控制这个家用设备,首先我们的实验室的智能家居设备是通 过各种传感器相互无线通信控制,这个控制这些传感器有两种方式:第一:电脑连接网 络控制,有专门的一个控制软件;第二,手机无线...

    Andriod平台下的文件共享及其安全技术研究与实现.doc

    本文研究了Android平台的应用设计开发以及常用的文件传输协议和数据加密技术。针对文件传输方案的设计实现,重点研究了AES加密算法和SSL安全协议。通过分析比较,根据本文件传输方案的特点,采用AES加密算法、SSL...

    Highcharts-8.1.2.zip

    Highcharts 是一个用纯 JavaScript 编写的一个图表库, 能够很简单便捷的在 Web 网站或是 Web 应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。 Highcharts 支持的图表类型有直线...

    Linux高性能服务器编程

    第8章 高性能服务器程序框架 8.1 服务器模型 8.1.1 CS模型 8.1.2 P2P模型 8.2 服务器编程框架 8.3 IO模型 8.4 两种高效的事件处理模式 8.4.1 Reactor模式 8.4.2 Proactor模式 8.4.3 模拟Proactor模式 8.5...

    java开源包3

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    JAVA上百实例源码以及开源项目源代码

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    RobotFramework常用库简介.pdf

    MongoDB library:使⽤pymongo和MongoDB交互的库。(MongoDB是⼀个基于分布式⽂件存储的数据库) Database Library (Java):基于Java的数据库测试库。也可使⽤Jython和Maven central. Database Library (Python):...

    java开源包1

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    java开源包11

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

Global site tag (gtag.js) - Google Analytics