当前位置: 移动技术网 > 移动技术>移动开发>Android > andorid jar/库源码解析之retrofit2

andorid jar/库源码解析之retrofit2

2020年04月27日  | 移动技术网移动技术  | 我要评论

目录:andorid jar/库源码解析 

retrofit2:

  作用:

    通过封装okhttp库,来进行web通讯,并且使用动态代理的方式,来调用接口地址,通过回调赋值结果。

  栗子:

  定义一个接口,用于访问使用。

public interface iserviceapi {
    @formurlencoded
    @post("login")
    call<loginresult> login(@field("name") string name, @field("pwd") string pwd);

    @get("getinfo")
    call<userinfo> getinfo(@query("token") string token);

    @get("getinfo2")
    call<userinfo> getinfo2(@query("token") string token);
}

  调用接口1.可以在main中调用,因为是通过异步执行(enqueue)

retrofit retrofit = new retrofit.builder().addconverterfactory(gsonconverterfactory.create()).baseurl("http://192.168.86.11:8087/").build();
        iserviceapi api = retrofit.create(iserviceapi.class);
        call<loginresult> call = api.login("test", "test1234");
        call.enqueue(new callback<loginresult>() {
            @override
            public void onresponse(call<loginresult> call, response<loginresult> response) {
                loginresult loginresult = response.body();
                if(loginresult != null) {
                }
            }

            @override
            public void onfailure(call<loginresult> call, throwable t) {
                log.i(tag, "ex " + t.getmessage());
            }
        });

  调用接口2.可以在main中调用,因为是通过异步执行(enqueue)

retrofit retrofit = new retrofit.builder().addconverterfactory(gsonconverterfactory.create()).baseurl("http://192.168.86.11:8087/").build();
        iserviceapi api = retrofit.create(iserviceapi.class);
        call<userinfo> call = api.getinfo("testtesttest");
        call.enqueue(new callback<userinfo>() {
            @override
            public void onresponse(call<userinfo> call, response<userinfo> response) {
                userinfo userinfo = response.body();
                if(userinfo != null) {
                }
            }

            @override
            public void onfailure(call<userinfo> call, throwable t) {
                log.i(tag, "ex " + t.getmessage());
            }
        });

  同步调用接口3.

retrofit retrofit = new retrofit.builder().addconverterfactory(gsonconverterfactory.create()).baseurl("http://192.168.86.11:8087/").build();
        iserviceapi api = retrofit.create(iserviceapi.class);
        call<loginresult> call = api.login("test", "test1234");
        try {
            response<loginresult> resultresponse = call.execute();
            loginresult result = resultresponse.body();
        }catch (exception e){
            e.printstacktrace();
        }

  源码解读:

  a:异步调用

  1、创建一个retrofit对象。

  2、retrofit.create(iserviceapi.class); // 使用proxy.newproxyinstance 创建一个接口的代理对象。内部使用 servicemethod配合okhttpcall调用,构造他们需要的对象数据

  3、调用enqueue,内部构造okhttp3.call对象,执行对象的enqueue方法。然后在okhttp3$callback方法中,调用retrofit2的 回调,赋值成功和失败。

  b:同步调用

  1、同理,同步调用,最后也是调用的。okhtt3.call的execute方法。

  源码:

  引入:

implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网