1、前言
- 在
Android
中,网络请求是必不可少的; - 目前
Retrofit
是Android
开发比较流行的网络请求框架,其操作性强、可扩展性好、代码风格简洁明了的优点帮助开发者事半功倍;
2、定义
一个Restful
设计风格的HTTP
网络请求框架,基于okhttp
;
3、功能
- 基于
okhttp
,遵循Restful API
设计风格; - 通过注解配置网络请求参数;
- 支持同步、异步网络请求;
- 支持多种数据的解析、序列化格式(
GSON
、JSON
、XML
、Protobuf
); - 提供对
RxJava
支持;
4、优点
-
功能强大:支持同步、异步,支持多种数据的解析、序列化格式,支持
RxJava
; - 简单易用:通过注解配置网络请求参数,采用大量设计模式简化使用;
-
可扩展性好:功能模块高度封装,解耦彻底,如自定义
Converters
; -
应用场景:任何网络请求的需求场景都应优先选择,特别是后台
API
遵循Rest API
设计风格,并且项目中使用到RxJava
的;
注:
Retrofit
是一个遵循Restful
风格的网络请求框架的封装,原因是网络请求的核心是okhttp
来完成,而Retrofit
仅负责网络请求接口的封装,APP
应用程序通过Retrofit
请求网络,实际上是使用Retrofit
接口层封装参数、header
、url
等信息,之后由okhttp
完成请求网络的操作,在服务器返回数据之后,okhttp
将原始的结果交给retrofit
,retrofit
再根据开发者需要进行数据解析;
5、使用步骤
- 1、添加
Retrofit
库的依赖 - 2、创建接收服务器返回的数据的类
- 3、创建用于描述网络请求的接口
- 4、创建
Retrofit
的实例 - 5、创建网络请求接口实例并配置网络请求参数
- 6、发送网络请求(异步/同步)
5.1、在gradle加入Retrofit依赖库
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
不要忘记添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
5.2、创建接收服务器返回数据的实体类Bean.java
package com.qinkl.retrofitdemo;
public class Bean {
public String code;
public String message;
}
5.3、创建用于描述网络请求的接口
RxJava
将http
请求抽象成Java
接口,采用注解的方式描述网络请求的参数和配置网络请求的相关信息
用动态代理方式动态将该接口翻译成一个HTTP
请求,最后在执行HTTP
请求
接口的每个方法的参数都需要使用注解来标注,否则会报错
创建接口文件MyApiService.java
package com.qinkl.retrofitdemo;
import retrofit2.Call;
import retrofit2.http.GET;
public interface MyApiService {
@GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")
Call<Bean> getCall();
}
5.4、创建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/")
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
由于这里运用了GsonConverterFactory
,所以要在gradle
引入依赖包:
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
5.5、创建网络请求接口实例和配置网络请求参数相关信息
MyApiService service = retrofit.create(MyApiService.class);
5.6、发送网络请求
Call<Bean> call = service.getCall();
call.enqueue(new Callback<Bean>() {
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {
response.body().show();
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {
Log.i("MainActivity","请求失败");
}
});
6、总结
- 通过本文,相信你一定对
Retrofit
的使用有了一定的了解; - 不过不仅仅要知道怎么用,还要明白其原理和工作过程,才能更好的掌握
Retrofit
的设计精髓;
网友评论