Android使用HttpURLConnection进行POST请求,向服务器上传数据
16lz
2021-01-26
先在清单文件中需要添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
开始使用HttpURLConnection进行POST请求,向服务器上传数据:
(1)定位到要获取资源的网址并打开连接:
URL url = new URL(String urlPath);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
(2)进行连接设置:
//设置连接超时,2000mshttpURLConnection.setConnectTimeout(2000);//设置指定时间内服务器没有返回数据的超时,5000mshttpURLConnection.setReadTimeout(5000);//设置允许输出httpURLConnection.setDoOutput(true);//设置请求的方式httpURLConnection.setRequestMethod("POST");
(3)将要传送的数据写入输出流:
PrintWriter out = new PrintWriter(httpURLConnection.getOutputStream());out.print(timeTag);//写入输出流out.flush();//立即刷新out.close();
(4)对响应码进行判断,并获取网络返回的输入流:
int code = httpURLConnection.getResponseCode();if(code == 200){ InputStream is = httpURLConnection.getInputStream(); //连接服务器后,服务器做出响应返回的数据 String serverResponse = URLDecoder.decode(readInStream(is), "utf-8"); is.close(); //对返回的数据serverResponse进行操作}
(5)关闭连接:
httpURLConnection.disconnect();
一个向服务器上传Json数据包的例子:
/** * 将Json对象上传服务器 * @param url * @param jsonObject * @throws JSONException */ private void postJsonToServer(URL url, JSONObject jsonObject ) throws JSONException { //把JSON数据转换成String类型使用输出流向服务器写 try { String str = "user="+ URLEncoder.encode(URLEncoder.encode(String.valueOf(jsonObject), "UTF-8"),"UTF-8"); try { HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setConnectTimeout(2000); httpURLConnection.setReadTimeout(5000); httpURLConnection.setDoOutput(true);//设置允许输出 httpURLConnection.setRequestMethod("POST");//设置请求的方式 httpURLConnection.setRequestProperty("ser-Agent", "Fiddler"); //把上面访问方式改为异步操作,就不会出现 android.os.NetworkOnMainThreadException异常 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); PrintWriter out = new PrintWriter(httpURLConnection.getOutputStream()); out.print(str);//写入输出流 out.flush();//立即刷新 out.close(); int code = httpURLConnection.getResponseCode(); if(code == 200 && ((url.toString()).equals(httpURLConnection.getURL().toString()))){ //获取服务器响应后返回的数据 InputStream is = httpURLConnection.getInputStream(); String successResponse = URLDecoder.decode(readInStream(is), "utf-8"); is.close(); if(SUCCESS_RESPONSE.equals(successResponse)){ //上传成功 } } else{ //上传失败 } }catch (ConnectException e){ e.printStackTrace(); } catch (SocketTimeoutException e){ e.printStackTrace(); catch (IOException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
更多相关文章
- android UI进阶之自定义组合控件
- Android(安卓)Material Design 控件常用的属性
- (笔记)RecyclerView item按下变色效果 没有生效
- android文件选择器filePicker
- Android数据库中查找一条数据使用的方法 query详解
- Android(安卓)Google购买PHP服务器端验证(订阅购买和一次性购买)
- 某android平板项目开发笔记----aChartEngine图表显示(2)
- android基础学习之有没有标签基础设置
- Android(安卓)permission 权限类及中文说明