【Android】Retrofi的基础使用教程
文章参考学习自 阳光沙滩 ,是我在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的基础使用教程的更多相关文章
- Android基础新手教程——1.10 反编译APK获代替码&资源
Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...
- Android基础新手教程——1.6 .9(九妹)图片怎么玩
Android基础新手教程--1.6 .9(九妹)图片怎么玩 标签(空格分隔): Android基础新手教程 1.本节引言: 可能有的一些疑问: 1.什么是.9图片? 答:图片后缀名前有.9的图片,如 ...
- Android基础新手教程——3.1 基于监听的事件处理机制
Android基础新手教程--3.1.1 基于监听的事件处理机制 标签(空格分隔): Android基础新手教程 本节引言: 第二章我们学习的是Android的UI控件,我们能够利用这些控件构成一个精 ...
- Android基础新手教程——4.1.3 Activity登堂入室
Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...
- Android基础新手教程——4.1.2 Activity初窥门径
Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...
- Android基础新手教程——4.4.1 ContentProvider初探
Android基础新手教程--4.4.1 ContentProvider初探 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android四大组件中的最后一个--Con ...
- Android基础新手教程——3.7 AnsyncTask异步任务
Android基础新手教程--3.7 AnsyncTask异步任务 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务 ...
- Android基础新手教程——4.3.1 BroadcastReceiver牛刀小试
Android基础新手教程--4.3.1 BroadcastReceiver牛刀小试 标签(空格分隔): Android基础新手教程 本节引言 本节我们将来学习Android四大组件中的第三个:Bro ...
- Android基础新手教程——4.1.1 Activity初学乍练
Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...
随机推荐
- Python和JS实现的Web SSH工具webssh,牛逼
这个工具是使用Python开发,可以从下面地址了解详情. 官网:https://pypi.org/project/webssh/ webssh这个工具可以干啥: 在linux机器上安装python环境 ...
- git--->Git中.gitignore配置
Git中.gitignore文件不起作用的解决以及Git中的忽略规则介绍 在Studio里使用Git管理代码的过程中,可以修改.gitignore文件中的标示的方法来忽略开发者想忽略掉的文件或目录,如 ...
- Git详解之特殊配置与钩子应用
前言 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求. ...
- sublime3 docblocker 注释插件的配置
sublime3 docblocker插件定制自己的注释,配置步骤 DocBlockr很好用,不仅仅可以自动生成注释,还可以手动编辑注释的格式. 安装方法: Cmd+Shift+P -> In ...
- pycharm 选中单列快捷键
直接键入 Alt + Shift +Insert 一次后就可以选中单列 再次键入就改回选中整行 如图: 第一键入 第二次键入
- 【WPF学习】第三十一章 WPF命令模型
WPF命令模型由许多可变的部分组成.总之,它们都具有如下4个重要元素: 命令:命令表示应用程序任务,并且跟踪任务是否能够被执行.然而,命令实际上不包含执行应用程序任务的代码. 命令绑定:每个命令绑定针 ...
- 讲一下java,c语言,c+和c++都是干嘛的,他们运行的软件都是哪些
讲一下java,c语言,c+和c++都是干嘛的,他们运行的软件都是哪些 都是用于开发软件的,用于不同的方面.比如,淘宝的后台,是java做的.而腾讯的qq的后台服务器,是c和c++的.暴雪游戏的后台服 ...
- VS2017/19 在更新之后,.net core项目出一个500的神奇错误
先说症状: VS 更新升级之后,如果用的是 .net core 的项目的时候,当vs升级时,.net core的sdk或者runtime有跟着升级的话,项目发布之后,覆盖dll到服务器时,会出现这个错 ...
- 【科创人独家】科界CTO林镇南:言必真,行必果,没有尽力而为,只有全力以赴
B2C-->B2B-->O2O-->B2G.从传统电商到电子商务,再到最火医美,最后转入国企,80末的林镇南成长路径有特点:行业跨度大.技能涉猎广.误以为"4点半下班&qu ...
- 利用ionic3进行上一行和左一行不动,中间移动的功能
首先在html中的写法是 <ion-header> <ion-navbar> <ion-title>历史数据</ion-title> </ion- ...