android面试(13)-retrofit

本文详细介绍了Retrofit在网络请求中的使用方法和核心原理,包括动态代理的概念,以及Retrofit如何通过接口注解配置网络请求参数,创建网络请求对象,通过网络请求适配器、执行器、数据转换器和回调执行器完成整个网络请求过程。同时,文章还探讨了Retrofit如何与OkHttp、CallAdapter和数据转换器协同工作。
摘要由CSDN通过智能技术生成

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();
    }


    //创建中介类
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值