|
在android中通过http post方法传递数据,核心的包是:
java.net.HttpURLConnection
另外还有是http header的设置,以及post中参数的设置。
详细的可以参考下面的代码:
package com.rubenxiao.blog;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
/**
* Created by ruben on 18-9-18.
*/
public class HttpUtils {
public static String submitPostData(Map<String, String> params, String encode) throws MalformedURLException {
/**
* 发送POST请求到服务器并返回服务器信息
* @param params 请求体内容
* @param encode 编码格式
* @return 服务器返回信息
*/
byte[] data = getRequestData(params, encode).toString().getBytes();
URL url = new URL("http://172.16.1.226:5557/upload");
HttpURLConnection httpURLConnection = null;
try{
httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout(3000); // 设置连接超时时间
httpURLConnection.setDoInput(true); // 打开输入流,以便从服务器获取数据
httpURLConnection.setDoOutput(true); // 打开输出流,以便向服务器提交数据
httpURLConnection.setRequestMethod("POST"); // 设置以POST方式提交数据
httpURLConnection.setUseCaches(false); // 使用POST方式不能使用缓存
// 设置请求体的类型是文本类型
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length));
// 获得输入流,向服务器写入数据
OutputStream outputStream = new BufferedOutputStream(httpURLConnection.getOutputStream());
outputStream.write(data);
outputStream.flush(); // 重要!flush()之后才会写入
int response = httpURLConnection.getResponseCode(); // 获得服务器响应码
if (response == HttpURLConnection.HTTP_OK) {
InputStream inputStream = httpURLConnection.getInputStream();
return dealResponseResult(inputStream); // 处理服务器响应结果
}
} catch (Exception e) {
e.printStackTrace();
} finally {
httpURLConnection.disconnect();
}
return "";
}
/**
* 封装请求体信息
* @param params 请求体内容
* @param encode 编码格式
* @return 请求体信息
*/
public static StringBuffer getRequestData(Map<String, String> params, String encode) {
StringBuffer stringBuffer = new StringBuffer(); //存储封装好的请求体信息
try {
for (Map.Entry<String, String> entry : params.entrySet()) {
stringBuffer.append(entry.getKey())
.append("=")
.append(URLEncoder.encode(entry.getValue(), encode))
.append("&");
}
stringBuffer.deleteCharAt(stringBuffer.length() - 1); // 删除最后一个"&"
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer;
}
/**
* 处理服务器的响应结果(将输入流转换成字符串)
* @param inputStream 服务器的响应输入流
* @return 服务器响应结果字符串
*/
public static String dealResponseResult(InputStream inputStream) {
String resultData = null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
try {
while ((len = inputStream.read(data)) != -1) {
byteArrayOutputStream.write(data, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
## 结尾
**如何才能让我们在面试中对答如流呢?**
答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:
![](https://img-blog.csdnimg.cn/img_convert/ad2e7eb94362a068b54bb906c238910c.webp?x-oss-process=image/format,png)
这里是一份BAT大厂面试资料专题包:
![](https://img-blog.csdnimg.cn/img_convert/8de1207e53e6587ea79e5f4258cf578a.webp?x-oss-process=image/format,png)
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
...(img-Ovv30hjb-1726116025662)]
这里是一份BAT大厂面试资料专题包:
[外链图片转存中...(img-4oMyDzgn-1726116025663)]
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。