Android的HttpUrlConnection类的GET和POST请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android的HttpUrlConnection类的GET和POST请求相关的知识,希望对你有一定的参考价值。

 1  /**
 2      * get方法使用
 3      */
 4     private void httpGet() {
 5         new Thread() {
 6             @Override
 7             public void run() {
            //此处的LOGIN是请求地址后面是拼接的参数
8 String path = LOGIN + "?phone=12345678900&password=123456"; 9 URL url; 10 HttpURLConnection connection; 11 try { 12 url = new URL(path); 13 connection = (HttpURLConnection) url.openConnection(); 14 connection.setConnectTimeout(4000);//设置链接超时 15 connection.setRequestMethod("GET");//设置请求方法 16 17 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//设置请求体的内容,处处默认也是一样表示请求的是文本内容 18 19 int responseCode = connection.getResponseCode(); 20 if (responseCode == HttpURLConnection.HTTP_OK) { 21 InputStream inputStream = connection.getInputStream(); 22 final String s = stremToString(inputStream); 23 24 runOnUiThread(new Runnable() { 25 @Override 26 public void run() { 27 Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); 28 } 29 }); 30 inputStream.close(); 31 } 32 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 } 37 }.start(); 38 }
 1    /**
 2      * post方法
 3      */
 4     private void httpPost(final Map<String, String> prams) {
 5         new Thread() {
 6             @Override
 7             public void run() {
 8                 if (prams == null) {
 9                     runOnUiThread(new Runnable() {
10                         @Override
11                         public void run() {
12                             Toast.makeText(MainActivity.this, "缺少参数!", Toast.LENGTH_SHORT).show();
13                         }
14                     });
15                     return;
16                 }
17                 URL url;
18                 HttpURLConnection connection;
19                 try {
20                     //拼接传入的请求参数
21                     StringBuffer buffer = new StringBuffer();
22                     //读取传入的map集合里参数
23                     for (Map.Entry<String, String> entry : prams.entrySet()) {
24                         String key = entry.getKey();
25                         String value = entry.getValue();
26                         //拼接参数 例如:phone = 12345678900 & password = 123456
27                         buffer.append(key + "=" + URLEncoder.encode(value, "utf-8") + "&");
28                     }
29                     //此处是删除末尾拼接的 & 符号
30                     buffer.deleteCharAt(buffer.length() - 1);
31                     //REGISTER 是我自己服务器的一个测试请求地址
32                     url = new URL(REGISTER);
33                     connection = (HttpURLConnection) url.openConnection();
34                     connection.setConnectTimeout(4000);
35                     
36                     //此处的输出流表示  服务器对客服端的响应输出流 即InPutStream
37                     //此处的输入流表示 客服端向服务器输入数据即 OutPutStream
38                     connection.setDoInput(true);//获取服务器的响应输出流 此处默认是true 可以不用设置
39                     connection.setDoOutput(true);//设置允许向服务其写入数据,获取向服务器的输入流。
40                     connection.setRequestMethod("POST");
41                     //此处设置向服务器请求的内容 请求的是文本内容 默认是可以不用设置的
42                     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
43                     //设置向服务器输入的请求体长度
44                     connection.setRequestProperty("Content-Length", String.valueOf(buffer.toString().getBytes().length));
45                     //向服务器写入请求体
46                     connection.getOutputStream().write(buffer.toString().getBytes());
47                     //获取请求状态吗 HttpURLConnection.HTTP_OK 为请求成功 写200 也可以的
48                     int responseCode = connection.getResponseCode();
49                     if (responseCode == HttpURLConnection.HTTP_OK) {
50                         InputStream inputStream = connection.getInputStream();
51                         final String result = stremToString(inputStream);
52                         runOnUiThread(new Runnable() {
53                             @Override
54                             public void run() {
55                                 Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
56                             }
57                         });
58                         inputStream.close();
59                     }
60 
61                 } catch (Exception e) {
62                     e.printStackTrace();
63                 }
64             }
65         }.start();
66     }
 1  /**
 2      * 把输入流转换成字符串
 3      *
 4      * @param inputStream
 5      * @return
 6      * @throws IOException
 7      */
 8     private String stremToString(InputStream inputStream) throws IOException {
 9         ByteArrayOutputStream bos = new ByteArrayOutputStream();
10         if (inputStream != null) {
11             int len;
12             byte[] bytes = new byte[1024];
13             while ((len = inputStream.read(bytes)) != -1) {
14                 bos.write(bytes, 0, len);
15             }
16             return bos.toString();
17         } else {
18             return "";
19         }
20     }

最后 各位小伙伴们 又不懂或不清楚的可以给我留言 欢迎大家给我提出建议 或是指出问题 我们彼此都需要一个学习的过程


以上是关于Android的HttpUrlConnection类的GET和POST请求的主要内容,如果未能解决你的问题,请参考以下文章

Android、HttpURLConnection、PUT 和 Authenticator

Android之HttpURLConnection

[Android基础]Android中使用HttpURLConnection

HttpUrlConnection.getInputStream 在 Android 中返回空流

android中的HttpUrlConnection的使用之二

android中的HttpUrlConnection的使用之一