Retrofit的使用
1、首先是创建一个interface的请求集合,里面用注解的方式写入需要配置的请求方法
public interface Service {
@GET("/repos/{user}/repos")
Call<List<Repo>> contributors(
@Path("user") String user);
}
2、然后通过Retrofit定义一个上面接口的实现类,就是所谓的动态代理
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
// Create an instance of our Service API interface.
Service service = retrofit.create(Service.class);
3、之后就是接口请求
Call<List<Repo>> call = service.repos("GitHub");
源码解析
Retrofit2源码如下,主要是通过Retrofit.create(Class)
方法创建出Service interface 实例,从而使得Service中配置的方法变得可用,这就是retrofit的核心;
@SuppressWarnings("unchecked") // Single-interface proxy creation guarded by parameter safety.
public <T> T create(final Class<T> service) {
Utils.validateServiceInterface(service);
if (validateEagerly) {
eagerlyValidateMethods(service);
}
return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
new InvocationHandler() {
private final Platform platform = Platform.get();
@Override public Object invoke(Object proxy, Method method, @Nullable Object[] args)
throws Throwable {
// If the method is a method from Object then defer to normal invocation.
if (method.getDeclaringClass() =