<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>安卓 on 菜菜</title><link>https://wan21411.github.io/tags/%E5%AE%89%E5%8D%93/</link><description>Recent content in 安卓 on 菜菜</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 03 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://wan21411.github.io/tags/%E5%AE%89%E5%8D%93/index.xml" rel="self" type="application/rss+xml"/><item><title>Android的网络请求</title><link>https://wan21411.github.io/p/android%E7%9A%84%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://wan21411.github.io/p/android%E7%9A%84%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82/</guid><description>&lt;img src="https://wan21411.github.io/" alt="Featured image of post Android的网络请求" /&gt;&lt;h1 id="弄清楚android的网络请求okhttp与retrofit的区别与使用"&gt;弄清楚Android的网络请求，OkHttp与Retrofit的区别与使用
&lt;/h1&gt;&lt;p&gt;目前主流的Android网络请求框架有OkHttp和Retrofit，不过Retrofit是对网络请求数据的封装，实际网络请求还是OkHttp进行，Retrofit其自身是不具备网络请求能力的。&lt;/p&gt;
&lt;h2 id="1okhttp的概念"&gt;1.OkHttp的概念
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;OkHttp&lt;/code&gt;它代替了HttpUrlConnection和Apache的HttpClient（用于发送和接收HTTP请求的客户端编程工具包）&lt;/p&gt;
&lt;p&gt;&amp;mdash;默认情况下OkHttp具有以下的特性：&lt;/p&gt;
&lt;p&gt;·支持HTTP/2.0,HTTP/2.0是持久化连接，支持多路复用（客户端和服务端只有一个连接，通过一个连接可以发出多重请求）；&lt;/p&gt;
&lt;p&gt;·连接池减少请求延时（连接池就是通过复用预先创建好的连接，减少系统在连接建立与销毁上的开销，从而提升程序性能和稳定性的技术）；&lt;/p&gt;
&lt;p&gt;·透明的GZIP压缩下载大小（GZIP是网络传输中的“真空压缩技术”，它可以通过在服务器端压缩数据，在客户端自动解压，来大幅减小在数据传输量，从而让网络加载更快、更省流量）；&lt;/p&gt;
&lt;p&gt;·缓存相应内容，避免一些完全重复的网络请求；&lt;/p&gt;
&lt;p&gt;·网络出现问题之后，OkHttp能自动中恢复，如果服务器有多个IP地址，一个失败后，OKHttp会自动尝试连接其他的地址；&lt;/p&gt;
&lt;h2 id="2okhttp的使用流程"&gt;2.OkHttp的使用流程
&lt;/h2&gt;&lt;p&gt;在使用OkHttp进行请求时，首先要创建一个OkHttpClient的实例&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;val&lt;/span&gt; &lt;span class="py"&gt;client&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OkHttpClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果想要发起一条Http请求，就需要创建一个Request对象&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;val&lt;/span&gt; &lt;span class="py"&gt;request&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后调用OkHttpClient的newCall方法来创建一个Call对象，并调用它的execute/enqueue方法来发送请求并获取服务器返回的数据（execute()方法是同步方法，enqueue()方法是异步方法）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;val&lt;/span&gt; &lt;span class="py"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;newCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;response对象就是服务器返回的数据，可以使用下面的方法来得到返回的具体内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;val&lt;/span&gt; &lt;span class="py"&gt;responseData&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其OkHttp的基本请求流程就是创建OkHttpClient()、Request()、Call(),接着调用OkHttpClient()的newCall().execute()/enqueue()来请求数据并获取数据&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://WAN21411.github.io" target="_blank" rel="noopener"
 &gt;欢迎访问我的博客&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>