在安卓开发中,进行HTTP POST请求并发送JSON数据是一项常见且重要的任务,尤其是在与服务器进行交互、提交数据或获取响应时。以下是从给定的文件信息中提炼出的关键知识点: ### 安卓HTTP POST JSON方法详解 #### 一、权限声明 在Android应用中执行网络操作,首先需要在`AndroidManifest.xml`文件中声明相应的权限。本例中,使用了以下两个权限: 1. `ACCESS_NETWORK_STATE`:允许应用检查设备当前的网络状态。 2. `INTERNET`:允许应用访问互联网。 这确保了应用能够正常进行网络通信。 #### 二、发起POST请求 在代码段中,我们通过`HttpURLConnection`类来发起一个HTTP POST请求,并发送JSON数据。以下是具体步骤: 1. **创建URL对象**:通过给定的服务URL创建一个`URL`对象。 ```java URL url = new URL(serviceUrl); ``` 2. **打开连接**:使用`openConnection()`方法打开到该URL的连接。 ```java HttpURLConnection conn = (HttpURLConnection) url.openConnection(); ``` 3. **设置请求属性**: - `setDoOutput(true)`:表示此连接将用于输出数据。 - `setDoInput(true)`:表示此连接将用于接收输入数据。 - `setRequestMethod("POST")`:设置请求方式为POST。 - `setUseCaches(false)`:设置不使用缓存。 - `setConnectTimeout(5000)`:设置连接超时时间,单位为毫秒。 4. **设置请求头**: - `setContent-Type("application/x-www-form-urlencoded")`:设置请求内容类型为表单编码格式。如果发送的是JSON数据,应改为`"application/json"`。 - `setContent-Length(entity.length+"")`:设置请求体的长度。 5. **发送请求**: - 使用`connect()`方法建立连接。 - 获取输出流`getOutputStream()`,并将要发送的数据写入其中。 - 调用`flush()`和`close()`方法关闭输出流。 6. **接收响应**: - 检查响应码是否为200(OK),如果是,则从输入流读取响应数据。 - 将读取的数据转换为字符串形式。 #### 三、异常处理 在实际开发中,网络请求可能会遇到各种异常,如网络不可达、服务器无响应等。因此,在代码中加入异常捕获处理是非常必要的。如: ```java catch(Exception e){ // TODO Auto-generated catch block e.printStackTrace(); } ``` #### 四、调试与日志 为了便于调试和追踪错误,代码中还加入了系统输出语句,打印关键信息,如服务URL、POST数据以及最终返回的JSON字符串。 #### 总结 以上是安卓中使用HTTP POST方法发送JSON数据的详细步骤。正确配置权限、合理设置请求参数、妥善处理异常和使用日志工具,都是保证网络请求顺利进行的重要因素。掌握这些知识点,能够帮助开发者在安卓应用中更有效地实现与服务器的数据交互。
<uses-permission android:name="android.permission.INTERNET" />
方法:
public static String getRestValue(String serviceUrl,String postData) throws Exception{
String json = "";
try {
System.out.println("进入服务调用,服务地址:"+serviceUrl);
System.out.println("服务参数"+postData);
URL url=new URL(serviceUrl);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setDoOutput(true); //允许向服务器输出数据
conn.setDoInput(true); //允许接收服务器数据
conn.setRequestMethod("POST");
conn.setUseCaches(false); // Post 请求不能使用缓存
conn.setConnectTimeout(5000);
// 参数前面不能加?号
String urlParas=postData;
byte [] entity=urlParas.getBytes();
//设置请求参数
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); //实体参数类型
conn.setRequestProperty("Content-Length", entity.length+"");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
// 要注意的是connection.getOutputStream会隐含的进行connect。
conn.connect();
//将要上传的参数写入流中
conn.getOutputStream().write(entity);
conn.getOutputStream().flush();
- vanillasky123452015-07-31通用的简单的东西啦
- lovelywille2015-04-09一般般啦,对我来说用处不大。还是再找吧
- rucio2018-12-18感谢楼主分享
- molinhao2014-04-28不错, 刚好用得上 。
- a9520204682014-03-29不错,很好用,谢谢
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 20个单片机案例.zip、数控稳压电源、IC卡读写仿真、led大屏幕点阵屏、AVR寻迹小车、AVR寻迹小车、LC振荡器等等
- 数据分析基础知识、工具应用与实践案例
- 【源码+数据库】基于ssm框架+mysql实现的Java web在线考试系统
- 基于python + tensorflow 实现的用textcnn方法做情感分析的项目,有数据
- win10按要求设置镜像过程
- XIHE_Meteorological_Data_1730421195.csv
- 基于 python+TuShare数据存储方法及数据分析过程
- 335个单片机源码参考-2024整理.zip
- 基于opencv的人脸识别(硬件实现于esp32-cam)高分项目
- 后台运行的写日志win32程序