`
liaokang.java
  • 浏览: 154855 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Android POST方式提交数据

阅读更多
android虽然内置了apache的HttpClient组件来实现客户端向服务器端提交数据,为了便于理解其底层原理,下面例子是通过URL获得Connection,并获得其输出流向服务器发送数据

1.新建一个web项目TestAndroid,我用到了struts2,引入相应的jar包,只需几个核心包就够了,多了容易报错,它们分别是
commons-logging-1.0.4.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
commons-fileupload-1.2.1.jar

2.新建一个action
package com.lamp.action;

public class LoginAction{
	private String id = null;
	private String name = null;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String execute() throws Exception {
		System.out.println(this.id + this.name);
		return "success";
	}
}



3.在struts.xml中对action进行相应配置
   <package name="lamp" extends="struts-default">
        <action name="login" class="com.lamp.action.LoginAction">
        	<result name="success">/WEB-INF/page/success.jsp</result>
        	<result name="error">/WEB-INF/page/error.jsp</result>
        </action>
    </package>


4.最后在web.xml中对struts进行启动配置
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


至此web配置完成

5.新建一个android工程,并编写一个工具类实现向服务器端发送数据
package com.lamp.util;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;

public class NetTool {
	
	/**
	 * 
	 * @param urlPath 请求路径
	 * @param params Map中key为请求参数,value为请求参数的值
	 * @param encoding	编码方式
	 * @return
	 * @throws Exception
	 */
	
	//通过post向服务器端发送数据,并获得服务器端输出流
	public static InputStream getInputStreamByPost(String urlPath,Map<String,String> params,String encoding) throws Exception{
		StringBuffer sb = new StringBuffer();
		for(Map.Entry<String,String> entry:params.entrySet()){
			sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), encoding));
			sb.append("&");
		}
		String data = sb.deleteCharAt(sb.length()-1).toString();
		URL url = new URL(urlPath);
		//打开连接
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		//设置提交方式
		conn.setDoOutput(true);
		conn.setDoInput(true);
		conn.setRequestMethod("POST");
		//post方式不能使用缓存
		conn.setUseCaches(false);
		conn.setInstanceFollowRedirects(true);
		//设置连接超时时间
		conn.setConnectTimeout(6*1000);
		//配置本次连接的Content-Type,配置为application/x-www-form-urlencoded
		conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		//维持长连接
		conn.setRequestProperty("Connection", "Keep-Alive");
		//设置浏览器编码
		conn.setRequestProperty("Charset", "UTF-8");
		DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
		//将请求参数数据向服务器端发送
		dos.writeBytes(data);
		dos.flush();
		dos.close();
		if(conn.getResponseCode() == 200){
			//获得服务器端输出流
			return conn.getInputStream();
		}
		return null;
	}
	
	//通过输入流获得字节数组
	public static byte[] readStream(InputStream is) throws Exception {
		byte[] buffer = new byte[1024];
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		int len = 0;
		while((len=is.read(buffer)) != -1){
			bos.write(buffer, 0, len);
		} 
		is.close();
		return bos.toByteArray();
	}
	
}



6.编写一个测试类
package com.lamp.activity;


import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import android.test.AndroidTestCase;
import android.util.Log;

import com.lamp.util.NetTool;

public class TestPostData extends AndroidTestCase {
	private static final String TAG = "TestPostData";
	public void test() throws Exception {
		//请求参数键-值对
		Map<String,String> map = new HashMap<String,String>();
		map.put("id", "123456");
		map.put("name", "李四");
		//服务器请求路径
		String urlPath = "http://ip地址:8080/TestAndroid/login";
		InputStream is = NetTool.getInputStreamByPost(urlPath, map, "UTF-8");
		byte[] data = NetTool.readStream(is);
		Log.i(TAG, new String(data));
	}

}



记得要在AndroidManifest.xml文件中注册访问网络权限以及单元测试所需的配置
  <!-- 注册访问网络权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>


首先将建立的web项目在应用服务器中部署并运行起来,然后在android工程中运行单元测试我们可以看到在web端得到了客户端发送过来的数据,而且客户端也得到了服务器端发送过来的数据
分享到:
评论
1 楼 viking_wu 2015-07-24  
   

相关推荐

    Android端使用get post 方法提交数据到服务器demo

    本文将详细讲解如何在Android端使用GET和POST方法提交数据到服务器,并结合传智播客张泽华Android视频54-57中的代码示例进行解析。 一、GET方法 GET方法是最简单的HTTP请求方式,常用于获取服务器上的资源。在...

    post方式提交数据

    本文将详细解析"POST方式提交数据"这一主题,特别针对Android平台进行探讨。 首先,理解POST方法的基本概念。POST是HTTP协议中的一个请求方法,用于向指定资源提交数据,以创建或更新资源。它将数据封装在请求正文...

    采用post方式提交数据到服务器及例子

    本篇文章将重点讲解如何使用POST方式提交数据到服务器,这对于Android应用与后端交互至关重要。 POST方法常用于发送用户输入的数据或者大量数据,因为它可以携带更多的数据,并且数据在请求体中传输,相对安全一些...

    android采用post方式获取服务器数据

    HTTP POST请求用于向服务器提交数据,常用于表单提交。与GET方法不同,POST方法会将数据包含在HTTP请求体内发送给服务器。这在提交大量数据或敏感数据时尤其有用,因为它可以避免将数据暴露在URL中。 Android提供了...

    Android Studio发起POST网络请求

    本文将详细讲解如何在Android Studio中使用Java语言和JSON数据格式实现POST请求,特别适合初学者学习。 **一、依赖库** 首先,我们需要引入必要的库,如OkHttp或Volley,它们可以帮助我们方便地发送网络请求。这里...

    android 登陆、提交数据或加载数据时提示页面

    在Android应用开发中,用户界面(UI)的交互体验至关重要,尤其是涉及到登录、提交数据以及加载数据等操作。这些操作通常涉及到网络通信、数据持久化、异步处理等多个技术领域。下面将根据提供的标题和描述,详细...

    Android提交数据到服务器端

    使用`HttpURLConnection`提交数据的基本步骤如下: 1. **建立连接**:通过URL对象获取`HttpURLConnection`实例。 2. **设置请求方法**:通常为`POST`,表示我们要向服务器发送数据。 3. **设置请求属性**:如...

    android get,post获取数据

    POST请求则常用于提交数据,如表单提交,数据在请求体中,大小限制相对较大,对用户不透明。 ### GET请求 在Android中,可以使用`HttpURLConnection`或第三方库如`OkHttp`来实现GET请求。以`HttpURLConnection`为例...

    Android GetPost数据提交实例.rar

    Android GetPost数据提交实例,发送post必须设置 conn.setDoInput(true);conn.setDoOutput(true);这两行代码,从用户界面提交过来的数据上传到服务器接收,类似于WEB网页提交表单的操作,不过Android有自己独特的...

    提交数据到服务器---android代码

    以下将详细讲解四种提交数据到服务器的方法:GET、POST、HttpClient的GET以及HttpClient的POST。 1. GET方法: GET是HTTP协议中最基本的请求方法,用于从服务器获取资源。在Android中,可以使用`HttpURLConnection`...

    Android中通过GET和POST方式以及使用HttpClient框架通过网络通信提交参数给web应用案例

    本文将深入探讨如何在Android中利用这两种方式以及HttpClient框架来提交参数给Web应用。 首先,GET和POST的主要区别在于它们处理数据的方式。GET方法通常用于获取资源,其参数附加在URL后面,易于观察但对数据长度...

    Android Get和Post方式访问网络

    POST方法用于向服务器提交数据,数据封装在请求体中,因此可以传输大量或敏感信息。在Android中,我们可以使用`HttpURLConnection`或`OkHttp`库来实现POST请求。以下是一个`HttpURLConnection`的示例: ```java URL...

    android基础 - POST GET

    在Android开发中,POST和GET是两种主要的HTTP请求方法,用于从服务器获取数据或向服务器发送数据。...通过理解这些基本概念和实践,开发者可以更好地在Android应用中利用POST和GET方法与服务器进行数据交互。

    HTTP POST 提交方式

    HTTP POST 是一种常见的HTTP请求方法,主要用于向指定资源提交数据。这种请求方式与GET方法不同,它通常用于客户端向服务器发送数据,例如用户登录时提交用户名和密码。POST请求的数据被包含在请求体中,而不是像GET...

    javahttp使用post进行提交数据

    总结来说,使用Java和Android进行HTTP POST提交数据涉及以下步骤: 1. 创建HTTP连接对象,设置请求方法为POST。 2. 设置请求头,如Content-Type(通常为"application/x-www-form-urlencoded")。 3. 编写并发送请求...

    android客户端向服务器提交请求的中文乱码问题

    在这个场景中,Android客户端使用HTTP POST方法向Tomcat服务器发送数据,其中包含中文字符。默认情况下,HTTP请求头中的字符集可能未明确指定,或者与服务器端期望的字符集不同。 Android客户端的代码使用了Apache...

    android http协议编程 post

    在Android开发中,HTTP协议是应用层中广泛使用的通信协议,...通过以上内容,你应该了解了在Android中如何使用HTTP POST请求来提交数据。实际开发中,可以根据项目需求选择合适的实现方式,确保数据传输的安全高效。

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

    - POST请求常用于提交数据,如表单数据、文件上传等。数据被包含在请求体中。 - Android中,可以使用`HttpURLConnection`或`HttpClient`来实现POST请求。`HttpURLConnection`是Java标准库的一部分,适用于API级别...

    android webview模拟网页post操作

    总结来说,通过WebView的`postUrl`方法,我们可以在Android应用中轻松地模拟POST请求,只需注意数据的编码方式,即可实现与网页的交互。这对于开发具有登录功能或其他需要与服务器交互的应用程序非常有用。

    delphi_rest与idhttp的post提交

    3. **POST提交过程** - **创建IDHTTP对象**:首先,在界面上添加一个TIdHTTP组件,然后在代码中实例化它,例如:`var HTTP: TIdHTTP;` - **配置IDHTTP**:设置必要的属性,如代理设置、连接超时、请求头等。例如,...

Global site tag (gtag.js) - Google Analytics