android网络请求

Android模块化-----网络模块封装

穿精又带淫゛_ 提交于 2020-03-08 13:30:34
在实际的应用开发中,常用到的网络框架有OkHttp、Retrofit、RxJava+RxAndroid,每个框架都有自己的优点:例如OkHttp,因为其特有的拦截器责任链模式,可以拦截请求和响应;Retrofit内部封装OkHttp,它更高效在于使用注解封装Http请求,在之前Retrofit中也使用过;RxJava的优势在于它的操作符,事件的转换。 每个框架都有自己的优点,因此通过整合全部的请求框架,来实现多域名、多环境、结构清晰的网络模块,因此在项目封装网络请求模块势在必行。 1、基础理论 首先先介绍一下Http中请求和响应的报文格式。 (1)get请求报文格式 ------ 第一部分:请求行 主要包括请求方法GET、URL(接口)、协议版本(Http1.0或者Http1.1) ------第二部分:请求头 Host:域名(www.xxxxx.xxx)、Connection(如果是Http1.1会默认是长连接 Keep Alive)、与Accept相关的字段(像Accept-Language、Accept-Encoding)… (2)get请求响应报文 ------第一部分:响应行 状态码、状态码描述、协议版本 ------第二部分:响应头 Server:服务器端的描述、Connection:长连接、响应的类型Content-type:json数据。。。。。。 -----

Android网络底层框架设计

大城市里の小女人 提交于 2020-02-07 05:05:12
简介: 很多人在进行网络请求的时候,都是直接请求网络数据,然后每次都自己手动解析数据,判断接口类别,然后再进行下一个步骤,但是其实请求网络数据有很多共性的东西,例如存储请求参数的统一性、后台返回的数据类型统一性、sessionId 过期处理统一性等。 (总结《App研发录》第二章(Android 网络底层框架设计)) 目录: 1.网络底层封装 2.App 数据缓存设计 3.用户登录 4.HTTP 头中的奥妙 网络底层封装 网路请求格式 Request 格式 网络请求一般具有 POST 、GET 方式: POST 方式是把 key-value 这样的键值对存放在 Form 表单中。 GET 方式是把 key-value 这样的键值对存放在 URL 上。 其实无论是哪种方式,都需要 key-value 的方式,因此,在传参数给网络请求框架的时候,都可以以 Map 的形式,然后网络请求框架再依据请求方式,把 Map 里面的数据取出来,放入相应的位置即可。 Response 格式 后台返回数据格式一般为 JSON,可以与后台协商返回固定格式的 JSON,例如所有的 JSON 都返回 isError、errorType、errorMessage、result 四个字段,它们的意思分别为: isError:请求网络数据成功与否。 errorType:错误类型。 errorMessage

Android 9.0/P okhttp网络请求出错

徘徊边缘 提交于 2020-01-28 12:20:36
今天做项目时意外发现,已经在AndroidManifest.xml申请网络权限,在8.0以下的系统中网络访问正常,但是9.0中出现网络请求失败。 如图(左是荣耀6x Android8.0,右是一加5 Android9.0): 出现这个错误的原因是:从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。且Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。 解决方案 在res目录下新建一个xml目录,在xml目录下新建network_security_config.xml文件, 插入以下代码 <?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> 编辑 AndroidManifest.xml节点application 插入代码: android:networkSecurityConfig="@xml/network_security_config" 成功解决,以下图为证 对了,这是使用okhttp3才会出现的,使用httpURLConnectio则不会出现这个问题 来源: https:

Android9 http网络请求的问题

依然范特西╮ 提交于 2020-01-28 00:26:01
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。 在 res 下新增一个 xml 目录,然后创建一个名为:network_security_config.xml 文件(名字自定) ,内容如下,大概意思就是允许开启http请求 <?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> 然后在APP的AndroidManifest.xml文件下的application标签增加以下属性 . 目录在res的同级 <application ... android:networkSecurityConfig="@xml/network_security_config" ... /> 来源:

Android开发之网络请求HttpURLConnection

。_饼干妹妹 提交于 2020-01-24 06:52:11
转:http://blog.csdn.net/guolin_blog/article/details/12452307 Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。 这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。 HttpClient DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。 但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。 HttpURLConnection HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。 哪一种才是最好的? 在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。 而在Android 2.3版本及以后

Android OkHttp3简介和使用详解

点点圈 提交于 2020-01-24 05:51:10
一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)。 OKHttpGitHub地址 OKHttp优点 支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。) socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数。 基于Headers的缓存策略减少重复的网络请求。 拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)。 OKHttp的功能 PUT,DELETE,POST,GET等请求 文件的上传下载 加载图片(内部会图片大小自动压缩) 支持请求回调,直接返回对象、对象集合 支持session的保持 二 OkHttp3使用 主要介绍 OkHttp3 的 Get 请求、 Post 请求、 上传下载文件 、 上传下载图片等功能 。 添加OkHttp3的依赖 compile 'com.squareup.okhttp3:okhttp:3.7.0' compile 'com

Android 网络通信框架Volley简介(Google IO 2013)

↘锁芯ラ 提交于 2019-12-04 13:56:02
1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。 这是Volley名称的由来: a burst or emission of many things or a large amount at once 在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。见下图 其实,从这幅图,我们也可以看出来,Volley特别适合数据量不大但是通信频繁的场景。 1.1. Volley引入的背景 在以前,我们可能面临如下很多麻烦的问题。 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取。 通过AsyncTask等机制使用HttpURLConnection从服务器去的图片资源 在AsyncTask#onPostExecute()里设置相应ImageView的属性。 而在Volley下,只需要一个函数即可,详细见后面的例子。 再比如,屏幕旋转的时候,有时候会导致再次从网络取得数据。为了避免这种不必要的网络访问

Android 网络请求详解

本秂侑毒 提交于 2019-12-04 01:24:37
我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的。如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient,而 Android 中主要提供了上述两种方式来进行 HTTP 操作。并且这两种方式都支持 HTTPS 协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。 但是 Googl e发布 6.0 版本的时候声明原生剔除 HttpClient,但是笔者认为 HttpClient 会提供相应的 jar 包做支持,毕竟 Google 对向下兼容这方面一直都做的很好,相信在选择网络功能的时候我们会选自己喜欢的方法。 HttpURLConnection 接着我们来看一下如何使用 HttpURLConnection 来处理简单的网络请求。 // Get方式请求 public static void requestByGet() throws Exception { String path = "10.128.7.34:3000/name=helloworld&password=android"; // 新建一个URL对象 URL url = new URL(path); // 打开一个HttpURLConnection连接 HttpURLConnection urlConn =

Android9 http网络请求的问题

泪湿孤枕 提交于 2019-11-29 20:02:38
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。 在 res 下新增一个 xml 目录,然后创建一个名为:network_security_config.xml 文件(名字自定) ,内容如下,大概意思就是允许开启http请求 <?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> 然后在APP的AndroidManifest.xml文件下的application标签增加以下属性 . 目录在res的同级 <application ... android:networkSecurityConfig="@xml/network_security_config" ... /> 来源:

Android常用库源码解析

那年仲夏 提交于 2019-11-27 15:49:59
图片加载框架比较 共同优点 都对多级缓存、线程池、缓存算法做了处理 自适应程度高,根据系统性能初始化缓存配置、系统信息变更后动态调整策略。比如根据 CPU 核数确定最大并发数,根据可用内存确定内存缓存大小,网络状态变化时调整最大并发数等。 支持多种数据源支持多种数据源,网络、本地、资源、Assets 等 不同点 Picasso所能实现的功能,Glide都能做,无非是所需的设置不同。但是Picasso体积比起Glide小太多。 Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。Glide 支持加载 Gif 动态图,而 Picasso 不支持该特性 Fresco在5.0以下的内存优化非常好,代价就是体积也非常的大,按体积算Fresco>Glide>Picasso UIL可以算是老牌最火的图片加载库了,该作者在项目中说明已经停止了对该项目的维护。这就意味着以后任何的 bug 都不会修复,任何的新特性都不会再继续开发,所以毫无疑问 UIL 不推荐在项目中使用了。 图片框架的缓存 MemorycCache图片内存缓存。默认使用了 LRU 算法。 DiskCache图片磁盘缓存,默认使用LruDiskCache算法,在缓存满时删除最近最少使用的图片 glide源码 一般看源码先看他的使用方法,通过使用的方法看对应的代码。 Glide.with(MainActivity.this