Retrofit网络库深入解析

作者: wxyass 分类: Android 发布时间: 2018-03-16 23:00

Retrofit流程

Retrofit

ServiceMethod

CallAdapter工厂
Converter工厂
CallFactory

OkHttpCall

CallAdapter

Converter

callbackExecutor

Retrofit简介

  • App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作
  • 在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析

Retrofit集成

// 网络依赖 https://github.com/square/okhttp
compile 'com.squareup.okio:okio:1.15.0'
compile 'com.squareup.okhttp3:okhttp:3.11.0'
// 网络依赖 https://github.com/square/retrofit
compile 'com.squareup.retrofit2:retrofit:2.4.0'
compile 'com.squareup.retrofit2:converter-scalars:2.4.0'
compile 'com.squareup.retrofit2:converter-gson:2.4.0' 



<uses-permission android:name="android.permission.INTERNET" />  

官网例子

1 定义一个实体bean

public class Student {
    private String login;

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

}

2 定义一个接口

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface GithubService {
    @GET("users/{user}")
    Call<Student> listRepos(@Path("user") String user);
}

3 Retrofit发起请求

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 官方案例
        netRequestWithRetrofit();
    }

    public void netRequestWithRetrofit(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        GithubService service = retrofit.create(GithubService.class);
        Call<Student> repos = service.listRepos("wxyass");
        repos.enqueue(new Callback<Student>() {
            @Override
            public void onResponse(Call<Student> call,Response<Student> response){
                System.out.print(response.body().getLogin());
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                System.out.print(t.getMessage());
            }
        });
    }
}

retrofit请求过程7步骤

  1. 添加Retrofit库的依赖,添加网络权限
  2. 创建接收服务器返回数据的类(一个bean类)
  3. 创建用于描述网络请求的接口
  4. 创建Retrofit实例
  5. 创建网络请求接口实例
  6. 发送网络请求(异步/同步)
  7. 处理服务器返回的数据

动态代理

动态代理: 代理类在程序运行时创建的代理方式
相比于静态代理

方式
1 jdk动态代理
2 CGLIB

源码下载:

https://github.com/wxyass/RetrofitTest

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

邮箱地址不会被公开。 必填项已用*标注