文章参考学习自 阳光沙滩 ,是我在B站上发现的宝藏Up主,超级棒!

在前段时间我写了一个java web后台,想做一个安卓端的打卡社区,后来发现请求和解析过于麻烦,就耽搁了。

趁着空闲,研究了一下大部分项目中都采用的MVP+RxJava+Retrofit模式中的Retrofit,发现异常好用,特此记录一下。

环境配置

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

retrofit是基于okhttp的二次封装,在上一次文章中我们介绍了Gson这个强大的工具(点我跳转),这里retrofit也提供了配套的基于Gson的转换器

 implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

都导入进来吧~

另外,由于安卓9.0禁止明文传输,需要单独设置一下:

联网权限

 <uses-permission android:name="android.permission.INTERNET" />

允许明文访问

 android:usesCleartextTraffic="true"

另外,请在build.gradle(app)中开启java 1.8支持

compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}

请求接口设置

retrofit在请求时候是使用注解来说明请求方式的

写法同springboot的controller层相似

都是注解(路径)+方法(传参)

这里主要介绍几个比较常用的

后台使用的是 https://gitee.com/sunofbeaches/SOBAndroidMiniWeb

所有注解都应该写在一个接口类中,这里命名为API.class

Retrofit初始化

 private static Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://10.0.2.2:9102")
.addConverterFactory(GsonConverterFactory.create())//增加一个转换工厂
.build();

值得一提的是,这里的10.0.2.2是安卓虚拟机访问电脑的ip地址

无参Get请求

这里@get代表get请求,后面是绝对路径

 @GET("/get/text")
Call<JsonResult> getJson();

方法体的返回类型都是Call<T>

这个也不难理解,在okhttp中返回的是一个ResponseBody

然后我们需要使用Gson对这个字符串进行解析再转成对象

而有了Retrofit以后我们可以直接让他自动解析转成相应类型

有参Get请求

@GET("/get/param")
Call<GetWithParamsResult>getWithParams(@Query("keyword")String keyword,
@Query("page")int page,
@Query("order")int order);

参数的格式为:@Query(‘参数名称’)参数类型 变量名称

当然如果参数很多,你可以直接使用Map来传值,即

 @GET("/get/param")
Call<GetWithParamsResult>getWithParams(@QueryMap Map<String,Object> params);

POST请求

@POST("/post/string")
Call<PostWithParamsResult>postWithParams(@Query("string")String content);

同理,这里只需要把注解改成@POST即可。

提一下,我们在设置返回类型的时候,可以使用一个工具:GsonFormat,把返回的json丢进去,会自动分析并生成对应的Bean类,非常方便

如何使用

在设置好接口后,我们就可以实例化接口对象了。

public void postWithParams(View view) {
Retrofit retrofit = RetrofitManager.getRetrofit();//获得一个Retrofit对象
API api = retrofit.create(API.class);//通过接口创建一个API实体
Call<PostWithParamsResult> c = api.postWithParams("hello world");//由接口获取相应的请求方法
c.enqueue(new Callback<PostWithParamsResult>() {
@Override
public void onResponse(Call<PostWithParamsResult> call, Response<PostWithParamsResult> response) {
//我们可以看到,这里的Call的结果已经自动转变成实体对象了
//只需要使用response.body()即可获得
//在获取之前我们可以先判断一下状态
if(response.code()== HttpURLConnection.HTTP_OK){//判断是否请求成功
PostWithParamsResult result=response.body();
//TODO
} } @Override
public void onFailure(Call<PostWithParamsResult> call, Throwable t) { }
});
}

我们可以看出,使用retrofit大大减少了我们配置、解析结果的代码量,非常方便。

同时将请求方法全部写在接口中,方便修改,简洁明了~

【Android】Retrofi的基础使用教程的更多相关文章

  1. Android基础新手教程——1.10 反编译APK获代替码&amp;资源

    Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...

  2. Android基础新手教程——1.6 .9(九妹)图片怎么玩

    Android基础新手教程--1.6 .9(九妹)图片怎么玩 标签(空格分隔): Android基础新手教程 1.本节引言: 可能有的一些疑问: 1.什么是.9图片? 答:图片后缀名前有.9的图片,如 ...

  3. Android基础新手教程——3.1 基于监听的事件处理机制

    Android基础新手教程--3.1.1 基于监听的事件处理机制 标签(空格分隔): Android基础新手教程 本节引言: 第二章我们学习的是Android的UI控件,我们能够利用这些控件构成一个精 ...

  4. Android基础新手教程——4.1.3 Activity登堂入室

    Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...

  5. Android基础新手教程——4.1.2 Activity初窥门径

    Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...

  6. Android基础新手教程——4.4.1 ContentProvider初探

    Android基础新手教程--4.4.1 ContentProvider初探 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android四大组件中的最后一个--Con ...

  7. Android基础新手教程——3.7 AnsyncTask异步任务

    Android基础新手教程--3.7 AnsyncTask异步任务 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务 ...

  8. Android基础新手教程——4.3.1 BroadcastReceiver牛刀小试

    Android基础新手教程--4.3.1 BroadcastReceiver牛刀小试 标签(空格分隔): Android基础新手教程 本节引言 本节我们将来学习Android四大组件中的第三个:Bro ...

  9. Android基础新手教程——4.1.1 Activity初学乍练

    Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...

随机推荐

  1. Spring Cloud Zuul之ZuulFilter详解

    简介 Spring Cloud Zuul网关在整个微服务体系中肩负对外开放接口.请求拦截.路由转发等作用,其核心处理则是ZuulFilter ZuulFilter部分源码 Zuul Filter全部继 ...

  2. hadoop-2.10.0安装hive-2.3.6

    公司建立数仓,hive是必不可少的,hive是建立在hadoop基础上的数据库,前面已经搭建起了hadoop高可用,要学习hive,先从搭建开始,下面梳理一下hive搭建过程 1.下载hive安装包 ...

  3. C语言系列之自增自减运算符的用法(二)

    运算符中最难理解的有自增自减运算符的使用方法,下面我将简单总结一下他们的使用方法 我们知道,C语言运行是由右向左运行的 下面我们来看一个例子 当i等于3的时候 j=++i; 由上面可知,C语言是由右向 ...

  4. 实验18:HDLC和PPP

    实验15-1:HDLC 和PPP 封装 Ø     实验目的通过本实验,读者可以掌握如下技能:(1) 串行链路上的封装概念(2) HDLC 封装(3) PPP 封装 Ø     实验拓扑 实验步骤n  ...

  5. 低功耗设计技术--Multi VDD--Level shifter

    本文转自:自己的微信公众号<集成电路设计及EDA教程> 前面的推文中我们分别介绍了低功耗设计中的Multi-VDD技术以及门控电源技术.在实际的低功耗设计中,门控电源技术中也常常结合Mul ...

  6. WeChall_Training: ASCII (Training, Encoding)

    In a computer, you can only work with numbers.In this challenge you have to decode the following mes ...

  7. symfony开发步骤简述

    对symfony具体开发也有了一定时间的接触了,下面说一下开发步骤,以备自己以后查看; 1.确定表关系,字段等 2.在相应的模块下的Rescourse下config/Doctrine创建相应的.orm ...

  8. How to setup backup by using EMC NW + EMC NMM for sqlserver failover cluster (not always on)

    As we said, sqlsever fail over cluster is perviously version of always on. The HA was guarenteed by ...

  9. 1276:【例9.20】P2758 编辑距离

    题目传送门[(https://www.luogu.com.cn/problem/P2758)] 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作 ...

  10. java中深拷贝浅拷贝简析

    Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...