Retrofit网络库深入解析
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步骤
- 添加Retrofit库的依赖,添加网络权限
- 创建接收服务器返回数据的类(一个bean类)
- 创建用于描述网络请求的接口
- 创建Retrofit实例
- 创建网络请求接口实例
- 发送网络请求(异步/同步)
- 处理服务器返回的数据
动态代理
动态代理: 代理类在程序运行时创建的代理方式
相比于静态代理
方式
1 jdk动态代理
2 CGLIB