retrofit可以说是如今市面上最火的网络框架,最常用的大概就是retrofit+RxJava+okhttp框架,结合MVP设计模式的经典应用了吧,今天我们只讲retrofit,上一篇已经说过,retrofit的内部其实也是使用了okhttp的
1.使用方法:
(1)创建一个接口作为http请求的api接口
public interface Api { @GET("repos/{owner}/{repo}/contributors") Call<ResponseBody> contributorBySimpleGetCall(@Path("owner") String owner,@Path("repo") String repo); }
(2)创建一个Retrofit的实例
(3)调用api接口
private void retrofitHttpGet() throws Exception{ Retrofit retrofit=new Retrofit.Builder().baseUrl("") .build(); Api api=retrofit.create(Api.class); Call<ResponseBody> responseBodyCall = api.contributorBySimpleGetCall("owner", "repo"); responseBodyCall.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { Log.e("返回的数据是:",response.body().toString()); } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { } }); }
2.源码分析:
讲到retrofit的源码,就不得不提到一个很牛逼的概念,java当中的动态代理
每次我想到java的动态代理,我都会想到一个例子,打个比方,比如说,你喜欢一个美女,想给他表白,情书都写好了,但是你不敢给他,于是拜托我递给她,但是我也喜欢这个美女,所以我在给她情书的时候,在她面前说你是个渣男。在这个过程中,你就是委托类,我就是中介类,美女就勉强当做代理类吧,你委托我干一件事,我在干这件事的前后可以做一些其他的操作,这就是Java的动态代理的概念,接下来就用一个代码实例来说明一下:
public class DTDLTest { public static void main(String args[]) { //创建委托类实例 WTLClass wtlClass=new WTLClass(); //创建中介类实例 ProxyHandler handler=new ProxyHandler(wtlClass); //动态创建代理类 Subject subject= (Subject)Proxy.newProxyInstance(wtlClass.getClass().getClassLoader(), Subject.class.getInterfaces(), handler); //通过代理类对象调用代理类方法,实际上会转到invoke方法调用 subject.doSomething(); } //创建委托类 static class WTLClass implements Subject{ @Override public void doSomething() { System.out.println("干一些事情"); } } //委托类实现的接口 interface Subject{ void doSomething(); } //创建中介类