当前位置:   article > 正文

Android 中的网络操作(HttpURLConnection)_httpurlconnection android

httpurlconnection android

一、Android 网络知识简介

Android 程序最重要的模块就是网络部分,如何从网络上下载数据,如何将处理过的数据上传至网络,往往是 Android 程序的关键环节。Android 中对于网络操作的有很多很好用的框架,如 OkHttp、Velloy、Retrofit 等。但是今天我们来重点讲解一下 HttpURLConnection 这个抽象类。

二、利用 HttpURLConnection 实现 Get 和 Post 请求

1、权限申请

Android 中要做跟网络相关的操作,一定需要在清单文件中申请网络权限,如下所示:

<uses-permission android:name="android.permission.INTERNET"/>
  • 1

Android 9.0 之前,只需要在清单文件中加上这句话就可以了,但是Android 9.0对 http 请求进行了限制,所以仅仅上面这一句话是不够的。为了解除这个限制,我们需要创建安全配置文件,具体步骤如下:

  1. 在 res 文件夹下创建xml/network-security-config 文件
    xml创建
  2. 增加 cleartextTrafficPermitted 属性
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
       <base-config cleartextTrafficPermitted="true"/>
    </network-security-config>
    
    • 1
    • 2
    • 3
    • 4
  3. 在 AndroidManifest.xml 的 Application 节点中申请
    android:networkSecurityConfig="@xml/network_security_config"
    
    • 1
2、get 请求

我们从玩Android上面随便找一个 GET 请求的 API。json 数据格式如下所示:
开放 API
现在我们来利用 HttpURLConnection 的 GET 请求来将上面这段 json 数据打印出来,具体代码如下所示:

 private final String URL = "https://wanandroid.com/wxarticle/chapters/json";
 
 // HttpURLConnection
private void get() {
   
    try {
   
        // 1.实例化一个URL对象
        URL url = new URL(URL);
        // 2.获取HttpURLConnection实例
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 3.设置和请求相关的属性
        // 请求方式
        conn.setRequestMethod("GET");
        // 请求超时时间
        conn.setConnectTimeout(10 * 1000);
        // 4.获取响应码  200:成功  404:未请求到指定资源  500:服务器异常
        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
   
            // 5.判断响应码并获取响应数据(响应的正文)
            // 获取响应的流

            // IO 操作
            InputStream in = conn.getInputStream();
            byte[] b = new byte[1024];
            int len;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((len = in.read(b)) > -1) {
   
                baos.write(b, 0, len);
            }
            String msg = baos.toString();
            Log.e("MainActivityTAG", msg);
        }
    } catch (Exception e) {
   
        e.printStackTrace();
    }
}

public void myClick(View v) {
   
    switch (v.getId()) {
   
        // Android4.0 以后网络操作必须放在子线程中
        case R.id.btn_get:
            new Thread(){
   
                @Override
                public void run() {
   
                    super.run();
                    get();
                }
            }.start();
            break;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

控制台上面的数据如下,我们已经成功的打印出来了。
结果
通过上述代码我们需要注意一下三点:

  1. 在清单文件中申请 INTERNET 权限
  2. 如果是 http 请求,需要创建安全配置文件 network-security-config
  3. Android4.0 以后网络操作必须放在子线程中
3、post 请求

我们从玩Android上面找一个 POST 请求的 API。然后我们可以利用 HttpURLConnection 的 POST 请求来实现一个登陆功能。
登陆API
具体代码实现如下所示࿱

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/210701
推荐阅读
相关标签
  

闽ICP备14008679号