Android进阶学习RxJava(六)Retrofit网络请求,内有免费接口福利
Retrofit 破冰
Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装
网络请求仍然由优秀的 OkHttp 完成
所以 Retrofit 只是一个好看的网络请求类包装,不要怕,简单易懂
Retrofit 使用环境配置
为了方便以后交火 与 RxJava 的依赖放到一起了
以下是依赖
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'io.reactivex:rxjava:1.1.1'
implementation 'io.reactivex:rxandroid:1.0.1'
配置环境重点中的重点,添加网络权限
很多小伙伴写完代码后,发现怎么都请求不了网络,大部分是这个问题
<uses-permission android:name="android.permission.INTERNET"/>
网络请求多数是 JSON,添加了 gson 作为转换,也可以根据需要添加别的转换库
Retrofit 主要定义了 4 个接口:
- Callback<T>:请求数据的返回
- Converter<F, T>:对返回数据进行解析和转换,在这里用 gson
- Call<T>:发送请求,Retrofit 默认的实现是 OkHttpCall<T>,重点是Call<T>,T为泛型
- CallAdapter<T>:将 Call 对象转换成其他对象,通常和 RxJava 放在一起联动
先准备两个数据接口,没有免费接口的同学,可以用我的
获取所有名字(点击或粘贴到地址栏可预览)
- 接口地址: https://leogyy.com/study/get_...
- 请求参数: 无参数
- 请求方法: GET
- 返回格式: JSON
根据名字获取详细信息(点击或粘贴到地址栏可预览)
- 接口地址: https://leogyy.com/study/get_...
- 请求参数: name
- 请求方法: POST
- 返回格式: JSON
开始撸码
一、养成好的编码习惯,先要新建一个 Urls 类,用来记录网络接口
public class Urls {
public static final String Base = "https://leogyy.com/";
// 获得所有的名字
public static final String get_name_all = "get_name_all";
// 根据名字查询详细信息
public static final String get_name_info = "get_name_info";
}
二、创建网络返回 JavaBean 类
- 使用 PostMan 请求接口,拿到返回 JSON
- 用在线 JavaBean 粘贴 JSON 生成 Bean 类(搜索 JSON 转JavaBean )
- get_name_all 返回 JSON 数据
{
"code": 1,
"info": "SUCCESS_DATA",
"data": [
"小明",
"小花",
"小华",
"小菜",
"小芳",
"小米"
]
}
- get_name_info 返回 JSON 数据
{
"code": 1,
"info": "SUCCESS_DATA",
"data": {
"姓名": "小明",
"身高": "175",
"爱好": "读书"
}
}
三、创建 Retrofit 网络请求的注解接口
public interface API_Protocol {
@POST(Urls.get_name_all)
Call<NameBean> getAllName_Bean();
@POST(Urls.get_name_info)
Call<NameInfoBean> getNameInfo_Bean(@Query("name") String name);
}
四、创建 Retrofit 请求
// 把这个放到Activity的全局变量中,同时在销毁Activity时再次置空,防止内存泄露
public static Retrofit retrofit = null;
//Activity 加载时候调用以下代码
retrofit = new Retrofit.Builder()
.baseUrl(Urls.Base)
.addConverterFactory(GsonConverterFactory.create())
.build();
五、发起 Retrofit 网络请求
// 发起网络请求
API_Protocol API_protocol = retrofit.create(API_Protocol.class);
Call<NameBean> call = API_protocol.getAllName_Bean();
call.enqueue(new Callback<NameBean>() {
@Override
public void onResponse(Call<NameBean> call, Response<NameBean> response) {
//数据请求成功
LogUtils.e(response.body().getMessage());
NameBean nameAll = response.body();
}
@Override
public void onFailure(Call<NameBean> call, Throwable t) {
//数据请求失败
LogUtils.e("Net_Error" + t.getMessage());
ToastUtil.showNetError();
}
});
五、总结
Retrofit 使用很简单,重要的是理解封装概念
封装可以让用户使用起来更容易,代码更优雅
推荐阅读
Android进阶学习RxJava(八)RxJava与Retrofit之双卡交火Pro
引言先补一下上文的不足doOnNext 很多小伙伴不是很理解,解释一下 {代码...} 开篇交火 Pro 侧重于嵌套类网络请求操作主要完成功能先获取所有的名字-> 然后根据每个名字来获取对应个人信息一. 快速的写一下获取...
leogyy赞 1阅读 1.3k
Android-博客及公众号推荐
首先强烈的推荐 stormzhang的博客,一直在关注他的博客和公众号,对我影响很大,不仅仅是Android学习之路,而且还是还会分享一些Android或者人生的经验,我也是一步步靠自己走过来,还在继续努力中。看stormzhang...
秦子帅赞 2阅读 3.9k
如何用3D流体实现逼真水流效果?
华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压。
HMSCore赞 1阅读 2k
Android安全之Https中间人攻击漏洞
HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性。中间人攻击,Man-in-the-middle attack,缩写:MITM,是指攻击者与通讯的两端分别创...
YAQ御安全阅读 5.3k
Android开发 - 掌握ConstraintLayout(一)传统布局的问题
在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面。随着Cons...
罗伊德赞 1阅读 2.3k
Android桌面图标快捷方式
长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。
xiangzhihong赞 2阅读 586
「Do.021」一文了解AndroidStudio3.4的全部更新
然后我看了一下历史,发现去年是从5月9日开始继续更新的,中间也休了2、3个月。好吧,不管怎样,从这个月开始,我又回来了。正好昨天AndroidStudio给我推了3.4版本的更新,那就从它开始吧!
贤榆的榆赞 1阅读 2k评论 2
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。