- 简介
初期是用于安卓的网络请求框架,后来也被用于java,结构清晰 两者都可以用
Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装
关于RESTful
按照官网的介绍 来实现一下
新建安卓工程
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
//加入依赖
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
}
新建一个Service 接口
public interface RfitService {
//1.新建接口 创建方法
@GET("users/{user}/repos") //对应url的请求路径
Call<ResponseBody> getRePos();
}
然后在mainAtivity中 新建对象
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//2.创建对象
Retrofit retrofit=new Retrofit.Builder().baseUrl("https://api.github.com").build();
//3.创建接口对象
RfitService api = retrofit.create(RfitService.class);
//4.调用接口方法,有两个方法 一个同步,一个异步。 新建回调来处理请求
api.getRePos().enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
System.out.println("success");//打印测试
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});//异步方法
//api.getRePos().execute();//同步方法
}
}
运行测试一下,打印如下信息。。
,接下来我们把body里的信息打印出来
,先预览一下接口
数据为json类型,,我们把请求的body转化为body需要加入下面方法。
新建一个Gson对象,把对象传入请求方法的参数
使用这个方法,可以把body转化为gson 。
使用Gson需要导入依赖
把请求方法返回值改成 List l类型,新建使用GsonFormat 建立Repo类,
GET是以注解的方式来实现请求,还有不同的注解的方式。
运行
- 分析源码来看看原理
同样根据原理来分析源码,首先程序的入口为enqueue方法,这个方法来做异步网络请求的。
首先看这个 RfitService api = retrofit.create(RfitService.class);
点Creat方法源码,
关键的就是return对象,这是一个动态代理,也是框架核心。
首先后边是三个参数,
第一个参数就是一个类加载器,第二个参数是多个接口,这里只有一个service,就是我们传进来的。
这里需要考虑的是,我们传 入的就是一个接口,关键就是 未实现的方法,传入之后是怎么是实现的。
就是在内部把传入的接口给实现了。
第三个参数就是一个方法回调的对象。