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端得到了客户端发送过来的数据,而且客户端也得到了服务器端发送过来的数据
Android端使用get post 方法提交数据到服务器demo Android端使用get post 方法提交数据到服务器demo 传智播客张泽华Android视频54-57代码 包括web和Android端 仅供学习 立即下载

相关推荐

Android中post请求传递json数据给服务端的实例

下面小编就为大家分享一篇Android中post请求传递json数据给服务端的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Android面向HTTP协议发送post请求

/** * 采用post请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到的数据 */ public static String postRequest(String username, String password) { try { String p

MartinDong 1294

CANoe诊断测试避坑指南:DTC故障注入与ECU刷写失败的N个常见原因排查

本文深入解析CANoe诊断测试中的常见问题,重点探讨DTC故障注入与ECU刷写失败的排查策略。从会话管理、安全访问到数据完整性校验,提供实战经验与CAPL脚本示例,帮助工程师规避诊断测试中的典型陷阱,提升车载网络通信与ECU刷写的可靠性。

weixin_29278805的博客 461

Android okhttp的简单应用post提交数据

Android的okhttp 这个框架帮我们的处理了一个http请求的需要我们考虑的地方比如线程 等等. 使用步骤 public class OkhttpUtils { public static void SendOkHttpRequest(String url,String username,String password,okhttp3.Callback callback...

深印我心的博客 2313

Coze工作流实战:Coze一键生成沉浸式历史故事视频

【coze工作流实战】一键生成火爆的沉浸式历史故事视频!短短3分钟,顶替你3天的工作量!

bickys的博客 1004

【TensorRT】TensorRT C# API 项目介绍:基于C#与TensorRT部署深度学习模型(上篇)

开发了TensorRT C# API 2.0版本,该版本在开发时充分考虑了上一版本应用时出现的问题,并进行了改进。同时在本版本中,我们对接口进行了优化,使用起来更加简单,并同时提供了相关的应用案例,方便开发者进行使用。

grape_yan的博客 3038

Android 使用Post方式提交数据

      在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。   在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST的参数不是放在URL字符串里面,而是放在HTTP请求数据中。...

weixin_33755557的博客 959

SAP SD科目确定:从配置到凭证的财务集成核心

本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。

weixin_33491377的博客 251

[android] 采用post的方式提交数据

GET:内部实现是组拼Url的方式,http协议规定最大长度4kb,ie浏览器限制1kb POST和GET的区别比较了一下,多了几条信息 Content-Type:application/x-www-form-urlencoded Content-Length:93 主体内容 只需修改上一节代码中的几个地方: 调用HttpURLConnection对象的setReque...

程序员老狼专注开发aigc或客服系统应用 218

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 923

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例

创龙科技研发的 TL3588-EVM 评估板具备强大视频处理能力,可满足多场景视频开发需求。为助力开发者快速上手,本文整理 7 个实用视频开发案例,涵盖从采集到显示的全流程,详细说明各案例的硬件连接、参数配置与代码解析,帮助开发者高效实现评估板视频相关功能开发与调试。

创龙,嵌入式一体化解决方案商 207

Android学习之Http使用Post方式进行数据提交

我们知道通过Get方式提交的数据是作为Url地址的一部分进行提交,而且对字节数的长度也有限制,与Get方式类似,http-post参数也是被URL编码的,然而它的变量名和变量值不作为URL的一部分被传送,而是放在实际的HTTP请求消息内部被传送。 可以通过如下的代码设置POST提交方式参数: HttpURLConnection urlConnection = (HttpURLConnecti

WILLIAM-HUAN 个人技术博客 2万+

QT 实现QStackedWidget切换页面右移动画

首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断的改变geometry;当动画结束的时候,隐藏并释放这个QLabel。以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。为了方便查看动画特效,设置了每个界面的背景图片。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 882

安卓利用get和post方式提交数据

e安教育 2017-03-23 09:47 该方法说明了安卓如何利用get方式提交数据,注意这里提交的数据是项目程序内存里面的数据. 另外,虽然get方式也可以提交数据,但是在数据量大于2K时候,建议使用post方式 另外.安卓还可以利用httpclient实现实体数据的提交,例如我们把硬盘上的某一个exe文件,txt文件或者其他文件可以提交,详情自行百度. 【本文为e

u011277123的博客 527

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分析。Impedance是时域阻抗曲线,也是最主要的观测指标,注意:impedance曲线的时间刻度不是延时,延时=时间刻度/2,因为TDR测量的是用一来一回的原理去测量的。Use Lossy peeling 默认不勾选,勾选的话代表同时仿真无损和有损方案,不勾选代表仅仿真有损方案。

weixin_54787054的博客 855

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android学习使用Post方式提交数据

在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。   在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST的参数不是放在URL字符串里面,而是放在HTTP请求数据中。

gxgldyh的专栏 1095

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android学习(50) -- 使用post方式提交数据

要点 post提交数据是用流写给服务器的 协议头中多了两个属性 Content-Type: application/x-www-form-urlencoded,描述提交的数据的mimetype Content-Length: 30,描述提交的数据的长度 //给请求头添加post多出来的两个属性 String data = "name=" + URLEncoder.enco

idiandi的博客 2227

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在android中使用Post方式提交数据

在前面的博客中介绍了在android中使用Get方式提交数据,这篇博客将介绍在android中使用Post方式提交数据到服务器,其中服务器端的代码的实现方式可以参考我的博客使用Post方式提交数据到Tomcat服务器 首先使用Android Studio创建一个android工程 第一步:修改activity_main.xml文件 <LinearLayout xmlns:android="

meishadevs的个人博客 2833

Android实现简单的注册登录 POST方式提交数据 基于AndroidStudio开发

登录布局页面 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tool...

XieTeTe的博客 8309

Android Get,Post,AsyncHttpClient向服务器提交数据三种方式

上次我们研究了Android端怎样解析web端上传的网络数据,这次我们来一起研究研究Android网络数据之向服务器提交数据的三种方式(get+post+AsyncHttpClient),代码如下: 如下图这是主界面: activaty_login.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/re

Super_769的博客 679

Android 采用post方式提交数据到服务器

接着上篇《Android 采用get方式提交数据到服务器》,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andro...

weixin_30687811的博客 82

Android 使用Post方式提交数据(登录)

  在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。   在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST的参数不是放在URL字符串里面,而是放在HTTP请求数据中。   ...

weixin_33932129的博客 538

Android之使用HTTP协议的Get/Post方式向服务器提交数据

Android之使用HTTP协议的Get/Post方式向服务器提交数据 1、Get方式 方法:通过拼接url在url后添加相应的数据,如:http://172.22.35.112:8080/videonews/GetInfoServlet?title=霍比特人&timelength=100; 缺点:通过Get方式提交数据只能发送2K以内的数据,适合发送容量较小的数据,另外,如果发送

Coder_android 730
上一篇: Android ContentProvider共享数据
下一篇: Android 流方式发送XML数据
lk231_java
博客等级 码龄15年 0粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值