秉承个人习惯,分三部:最快速度完成一个demo,了解基本姿势,实现更多的操作
Retrofit简介
简介还是要写在前面
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求
快速完成一个简单的请求
1.添加依赖
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
2.添加网络权限
3.新建返回数据类
/**
* 接收服务器返回数据的类
*/
public class News {
...
}
4.新建用于描述网络请求的接口
/**
* 用于描述网络请求的接口
*/
public interface APi {
@GET("list.php?sort=desc&page=&pagesize=&time=1552055993&key=5df04feb8b3fc0bf91947a5ca91916c0")
Call getNews();
}
5.新建一个帮助类,用于网络初始化和相关处理
public class Http {
private static APi mApi;
public static void init() {
Retrofit retrofit = new Retrofit.Builder()
// .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//设置数据解析器
.addConverterFactory(GsonConverterFactory.create())
//设置网络请求的Url地址
.baseUrl("http://v.juhe.cn/joke/content/")
// .baseUrl("http://www.baidu.com")
.build();
// 创建网络请求接口的实例
mApi = retrofit.create(APi.class);
}
public static Call getNews() {
return mApi.getNews();
}
}
6.在activity中使用
public class RetrofitActivity extends HttpActivity {
@Override
public void action() {
super.action();
Http.init();
}
@Override
public void request() {
Http.getNews().enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
tvRequest.setText(response.body().getResult().getData().get(0).getContent());
Log.e(TAG, response.toString());
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
}
先初始化,然后调用具体请求方法。
有一点需要注意,在初始化里.baseUrl(“”)的设置,
如果是以.com .cn 等结尾就不需要加 / ,否则就加上 /;
具体请查看 https://www.jianshu.com/p/d6b8b6bc6209
基本姿势
Retrofit的好处:解耦
Retrofit的特点:注解
Retrofit还有什么功能:可以配置不同的HttpClient、可以配置不同的反序列化工具、可以配置不同的网络请求适配器
-
注解
Retrofit将Http请求抽象成Java接口,并在接口里面采用注解来配置网络请求参数,用动态代理来将接口的注解“翻译”成一个Http请求,最后再执行Http请求。注解可以说是Retrofit相较于其它网络请求的一大标志。下面就来了解了解在Retrofit中我们需要了解的注解
- 请求方法
注解代码 | 请求格式 |
---|---|
@GET | GET请求 |
@POST | POST请求 |
@DELETE | DELETE请求 |
@HEAD | HEAD请求 |
@OPTIONS | OPTIONS请求 |
@PATCH | PATCH请求 |
- 请求参数
注解代码 | 说明 |
---|---|
@Headers | 添加请求头 |
@Path | 替换路径 |
@Query | 替代参数值,通常是结合get请求的 |
@FormUrlEncoded | 用表单数据提交 |
@Field | 替换参数值,是结合post请求的 |