通过封装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'
如对本文有疑问, 点击进行留言回复!!
LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug ———————————————— 版权声明:本文为CSDN博主「
JobScheduler 实现 特定时间,特定条件(系统空闲,电池电量,磁盘空间 ……)下执行任务
温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 10 Service
网友评论