1. 简介
    初期是用于安卓的网络请求框架,后来也被用于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 接口

安卓res统一增加前缀_网络请求

public interface RfitService {
    //1.新建接口 创建方法
    @GET("users/{user}/repos")  //对应url的请求路径
    Call<ResponseBody> getRePos();

}

然后在mainAtivity中 新建对象

安卓res统一增加前缀_安卓res统一增加前缀_02

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();//同步方法
    }
}

运行测试一下,打印如下信息。。

安卓res统一增加前缀_安卓res统一增加前缀_03

,接下来我们把body里的信息打印出来

,先预览一下接口

安卓res统一增加前缀_ide_04

数据为json类型,,我们把请求的body转化为body需要加入下面方法。

新建一个Gson对象,把对象传入请求方法的参数

安卓res统一增加前缀_安卓res统一增加前缀_05

使用这个方法,可以把body转化为gson 。

使用Gson需要导入依赖

安卓res统一增加前缀_android_06

把请求方法返回值改成 List l类型,新建使用GsonFormat 建立Repo类,

GET是以注解的方式来实现请求,还有不同的注解的方式。

安卓res统一增加前缀_网络请求_07

安卓res统一增加前缀_网络请求_08


安卓res统一增加前缀_ide_09


安卓res统一增加前缀_android_10

安卓res统一增加前缀_安卓res统一增加前缀_11


运行

安卓res统一增加前缀_ide_12

  1. 分析源码来看看原理
    同样根据原理来分析源码,首先程序的入口为enqueue方法,这个方法来做异步网络请求的。

    首先看这个 RfitService api = retrofit.create(RfitService.class);
    点Creat方法源码,

    关键的就是return对象,这是一个动态代理,也是框架核心。
    首先后边是三个参数,

    第一个参数就是一个类加载器,第二个参数是多个接口,这里只有一个service,就是我们传进来的。
    这里需要考虑的是,我们传 入的就是一个接口,关键就是 未实现的方法,传入之后是怎么是实现的。
    就是在内部把传入的接口给实现了。
    第三个参数就是一个方法回调的对象。