您的位置:首页 > 理论基础 > 计算机网络

Android HttpURLConnection服务器POST上传数据

2017-06-16 20:16 344 查看
本文中使用HttpURLConnection与服务器通讯,json数据的转换使用阿里的fastjson,快速简单,不废话,代码说话。
public void HttpURLsend(int signalNum) {
URL url = null;
String user_id = "e82423d4ecbe4d36bed032c134d7073a";   //用户ID
String target = "http://***.**.*.***:8080/homehealth/app/user/" + user_id + "/ecgsegment";//*号为服务器ID地址
short raw_short; //定义心电数据存放数组
StringBuilder temp = new StringBuilder();  //存放要上传的json数据
int statusCode = -1;  //上传失败成功标记
InputStream in = null; //数据输出流
BufferedReader rd = null;
HttpURLConnection urlConn = null;

byte[] raw = new byte[10 * 250 * 3]; //模拟正弦波数据
for (int i = 0; i < raw.length / 2; i++) {
raw_short = (short) ((Math.sin(i * Math.PI / 90) + 1) * 50);
raw[2 * i] = (byte) (raw_short & 0xff);
raw[2 * i + 1] = (byte) (raw_short >> 8);
}

params = new HashMap<>();  //以键值对的方式存储数据
Date startTime = null;  //获取时间,并转格式
try {
startTime = DateUtils.parseDate("2017-02-08 14:00:39 001", DateUtils.SDF_yyyy_MM_dd_HH_mm_ss_SSS);
} catch (ParseException e) {
e.printStackTrace();
}
params.put("userId", user_id);  //将要上传的数据和信息加入Map中
params.put("channel", signalNum);
params.put("measureStartTime", startTime.getTime());
params.put("segmentTime", new Date());
params.put("deviceMac", "00:11:22:AA:BB:CC");
params.put("rawData", raw);
params.put("type", 0);
params.put("exceptionType", 32);
params.put("curHeartrate", 60);

try {
StringBuffer paramStringBuffer = new StringBuffer();
if (params != null && params.size() > 0) {
JSONObject obj = new JSONObject(params);
paramStringBuffer.append(obj.toJSONString());
}

url = new URL(target);
urlConn = (HttpURLConnection) url.openConnection(); //创建一个http连接
urlConn.setRequestMethod("POST"); //指定post请求方式
urlConn.setDoInput(true); //向连接中写入数据
urlConn.setUseCaches(false); //禁止缓存
urlConn.setConnectTimeout(2 * 1000);
urlConn.setReadTimeout(5 * 1000);
//  addSessionID(urlConn);

if (paramStringBuffer.length() > 0){
byte[] data = paramStringBuffer.toString().getBytes();
urlConn.setRequestProperty("Content-Type", "application/json"); //设置内容类型
urlConn.setRequestProperty("Content-Length", data.length + "");// 注意是字节长度, 不是字符长度
urlConn.setDoOutput(true); //从连接中读取数据
DataOutputStream out = new DataOutputStream(urlConn.getOutputStream()); //获取输出流

out.write(data);
out.flush(); //输出缓存
out.close();
}

urlConn.getOutputStream().flush();
urlConn.getOutputStream().close();

//    doCookie(httpURLConnection
);
statusCode = urlConn.getResponseCode();  //获取上传服务器反馈
if(statusCode == 200){
in = urlConn.getInputStream();  //获取上传成功反馈
} else {
in = urlConn.getErrorStream();  //获取上传失败反馈

}

rd = new BufferedReader(new InputStreamReader(in));

String line = null;
while ((line = rd.readLine()) != null) {
//            temp.append(line); //读取反馈信息,并log出信息
Log.w(TAG,"response_data" + " = " + line);
}

} catch (IOException e) {
e.printStackTrace();
statusCode = -1;
//若一次上传失败,可再次呼叫操作
} finally {
if (rd != null){
try {
rd.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (urlConn != null){
urlConn.disconnect();
}

}
}

其中我把通信代码写成了函数,由于之前是给心电数据上传写的例程 signalNum 为心电的导联数,去掉不影响通信。例程中模拟了正弦波数据上传,要想用在自己代码中,还需要归整为一个类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐