Network下方什么请求也没有_Android开发中请求网络连接时Google挖的一些坑

在Android项目中使用HttpURLConnection进行网络通信时遇到了问题。主线程中不允许直接进行网络请求,需要放在子线程中,并且从Android 3.0开始,更新UI必须在主线程。另外,Android P及以上版本禁止明文传输,需使用HTTPS。解决方法包括使用HTTPS、降低targetSdkVersion或修改网络安全配置。本文记录了解决这些问题的过程和方法。
摘要由CSDN通过智能技术生成

在还没有真正在android项目中运行我的请求网络通信(使用HttpURLConnection类)的代码的时候,我还天真的以为会和在java项目中一样顺畅的运行的,所有就没多想,照着java中的代码就是一顿复制粘贴,然后,然后...

3c2f0bbc0b9a0e998ecd9f0fc66cd568.png

它崩溃了,我懵逼了。。。

当然,在我抱着把百度查个底朝天的决心,终于是把其中的坑给填上了。

主线程中不能运行网络请求

这是第一个坑,因为一般我们要是在java项目中写网络请求,是不需要用到多线程的。但在Android项目中,我们需要将整段网络请求的代码添加到子线程中:

5a6b03edfa8af08f750738428c105f2f.png

这是在Android3.0之后的版本中出现的规定。当我们加入了多线程之后就解决了一运行就黑屏的困扰,但这样我们需要注意了,当你有需求要在这个子线程中改变Activity的UI时,就需要回到主线程中编写代码。怎么回来,很简单:

d3245bd75d2e9ce6e6cacffc59d56446.png

一个runOnUiThread就搞定了,它属于Activity类中的一个方法。

默认不能使用明码传输

没错,在Android P中是禁止使用明码传输的。说明白点,就是你不能再在Android项目中获取和发送http请求了。只能使用带https头的请求。刚开始我感觉这样的设定太坑了吧,但想了想,Google也是为了数据安全着想,也是可以的。那么,怎么判断我们请求的地址真的被禁止了呢,答案是,它会抛出这样一个异常:Cleartext HTTP traffic to xxx not permitted,xxx部分是你要请求的url,很清楚的告诉了你不能使用http这样的明文进行网络通信。怎么解决:

  1. 把请求改成https头(他说不能用http咋就不用了)
  2. targetSdkVersion 调到27或是更低的版本(该设定只针对高版本)
  3. 在AndroidManifest.xml配置文件的标签中直接插 android:usesCleartextTraffic="true"(这样做其实是允许Android明码传输)
  4. 和第三种方法一个道理,只是换了个更改的方式:

我们先要在res文件夹中创建 network_security_config.xml 的xml文件,然后配置:

2aaa21da8472806ce6c7278f7e7f2be7.png

保存,然后在清单文件(AndroidManifest.xml)的 application 标签中引用该配置:

695f691e552f745d1fc5d8eb6963ca81.png

网络安全配置更改完成。

使用上述其中一种方法都可以解决这个问题,还是情况吧。

总结

这篇文章我觉得只能算得上是我的一个笔记吧,主要是因为我在这个环节上研究了好久,为了“吸取教训”才写下的这篇文章,也请读者不要太认真,为的只是遇到同样的读者们一个参考。如有错误的地方,请指出,我必积极改正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值