retrofit 在 okhttp 上做了哪些封装_入门Retrofit,看这一篇就够了

本文主要对Android中经常使用的网络请求框架Retrofit做简单介绍,抛砖引玉,希望可以帮大家快速入门Retrofit的使用。

本文目录如下:

52523f6d3a528590cc7c1608d81cfa99.png

Retrofit介绍

3edde09bd9471b651dbe23939db8093e.png

Retrofit是Square公司开发的一款针对Android和java的网络请求框架,遵循Restful设计风格,底层基于OkHttp。

Retrofit具有以下主要功能:

  1. 支持同步/异步网络请求
  2. 支持多种数据的解析&序列化格式(Gson、json、XML等等)
  3. 通过注解配置网络请求参数
  4. 提供对Rxjava的支持高度解耦,使用方便

相比去其他网络请求框架,其具有性能特别棒、使用特别方便的特性,所以在任何网络请求场景下,我们都应该有限考虑Retrofit,本文就Retrofit的入门使用和简单特性做简单介绍,抛砖引玉,希望大家可以爱上Retrofit。

基础使用步骤

我们首先通过一个简单的案例带大家走一遍使用Retrofit的完整流程,然后再深入介绍Retrofit的一些特性。

我们要做的就是在Android中使用Retrofit发起网络请求,将下图(图片地址:http://picture-pool.oss-cn-beijing.aliyuncs.com/2019-06-29-121904.png)下载并展示出来,下面我来一步一步介绍如何去做。

60216a425f25b2bb85ed42d71a275554.png

添加依赖

在Gradle文件中添加如下依赖:

implementation 'com.squareup.retrofit2:retrofit:2.6.0'

声明网络权限

在Android的manifest配置文件中声明网络请求权限:

创建用于配置网络请求的接口

Retrofit将 Http请求抽象成 Java接口,采用注解来描述配置网络请求参数,何为配置网络请求参数?说白了就是设置网络请求的地址是什么、使用什么请求方法、传递的参数是什么、返回值类型是什么等等一系列配置信息,通过接口描述清楚这些具体的网络配置信息,Retrofit才能根据你的配置发起最终的网络请求。所以我们首先应该声明一个用于配置网络请求的Java接口:

/** * @author dmrfcoder * @date 2019-06-29 */public interface GetRequestInterface { /** * * * 通过get()方法获取图片的请求接口 * GET注解中的参数值"2019-06-29-121904.png"和Retrofit的base url拼接在一起就是本次请求的最终地址 * * @return * */ @GET("2019-06-29-121904.png") Call getPictureCall();}

创建Retrofit实例并发起网络请求

这里直接给出代码,重点都在注释中:

 public void retrofitGet() { /* 创建Retrofit对象,这里设置了baseUrl,注意我们在声明网络配置接口GetRequestInterface的时候在GET注解中也声明了一个Url, 我们将会这里的baseUrl和GET注解中设置的Url拼接之后就可以形成最终网络请求实际访问的url */ Retrofit retrofit = new Retrofit.Builder().baseUrl("http://picture-pool.oss-cn-beijing.aliyuncs.com/").build(); //创建网络请求配置的接口实例 GetRequestInterface getRequestInterface = retrofit.create(GetRequestInterface.class); //调用我们声明的getPictureCall()方法创建Call对象 Call requestBodyCall = getRequestInterface.getPictureCall(); //使用requestBodyCall发起异步网络请求 requestBodyCall.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { //将网络请求返回的数据解析为图片并展示到界面 ResponseBody body = response.body(); InputStream inputStream = body.byteStream(); Drawable drawable = Drawable.createFromStream(inputStream, "pic.png"); imageView.setBackground(drawable); Log.e(TAG, "网络请求成功"); } @Override public void onFailure(Call call, Throwable t) { Log.e(TAG, "网络请求失败,失败原因:" + t.getMessage()); } }); }

如果使用过OkHttp的读者可能很熟悉最后两步创建Call对象、发起异步网络请求的操作,几乎和OkHttp一模一样,这是因为Retrofit就是基于OkHttp的啊~~

最终效果如下:

d02b6229780cb86bb55e0684d366a6a7.gif

细心的读者可能发现了一个问题,在上面的代码中我是直接在CallBack接口的onResponse()回调方法中更新的ImageView,即在onResponse()中更新UI的,在OkHttp中这个onResponse()方法是在子线程中被调用的,而在Retrofit中,onResponse()和onFailure()这两个回调方法都是在主线程进行调用的,所以可以在其中直接更新UI,这也是Retrofit和OkHttp的一点不同之处。

Retrofit使用详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值