赞
踩
Android 程序最重要的模块就是网络部分,如何从网络上下载数据,如何将处理过的数据上传至网络,往往是 Android 程序的关键环节。Android 中对于网络操作的有很多很好用的框架,如 OkHttp、Velloy、Retrofit 等。但是今天我们来重点讲解一下 HttpURLConnection 这个抽象类。
Android 中要做跟网络相关的操作,一定需要在清单文件中申请网络权限,如下所示:
<uses-permission android:name="android.permission.INTERNET"/>
Android 9.0 之前,只需要在清单文件中加上这句话就可以了,但是Android 9.0对 http 请求进行了限制,所以仅仅上面这一句话是不够的。为了解除这个限制,我们需要创建安全配置文件,具体步骤如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
</network-security-config>
android:networkSecurityConfig="@xml/network_security_config"
我们从玩Android上面随便找一个 GET 请求的 API。json 数据格式如下所示:
现在我们来利用 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; } }
控制台上面的数据如下,我们已经成功的打印出来了。
通过上述代码我们需要注意一下三点:
我们从玩Android上面找一个 POST 请求的 API。然后我们可以利用 HttpURLConnection 的 POST 请求来实现一个登陆功能。
具体代码实现如下所示
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。