Retrofit介绍
移动开发三剑客:Retrofit 2.0,RxJava(Android), OkHttp3.3
官方标语:A type-safe HTTP client for Android and Java
语意很明显一款android安全类型的http客户端
Retrofit是SQUARE美国一家移动支付公司最近新发布的在Android平台上http访问的开源项目,Retrofit与okhttp共同出自于Square公司,retrofit对okhttp做了一层封装,把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了
Retrofit是一套RESTful架构的Android(Java)客户端实现,基于注解,提供JSON to POJO(Plain Ordinary Java Object,简单Java对象),POJO to JSON,网络请求(POST,GET,PUT,DELETE等)封装。
我对RESTful架构的理解是:
相当于设计一个函数,函数内部过程对客户端不可见,客户端只传递参数接受结果
Retrofit特点 :
- 底层使用OkHttp进行网络传输,性能好,速度快
- 可以自动将REST API返回的数据转化为Java对象,且支持多种数据转换格式(如json、xml等)
- 使用Java注解声明HTTP请求
- 支持 Multipart请求和文件上传
如何快速的上手Retrofit
1 首先在你的Grandle中引入Retrofit2.0
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
2 创建一个retrofit
Retrofit wzqRertofit = new Retrofit.Builder()
.baseUrl("http://192.168.10.155:80/")
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient()).build();
3 创建接口请求库控制中心
public interface WebAPIService {
@FormUrlEncoded
@POST("WebService/")
Call<Webdata> getData(@Field("service") String first);
}
POST请求不要忘记加@FormUrlEncoded
4 调用API
Retrofit支持异步和同步,
call.enqueue()来采用异步请求
call.execute() 则采用同步方
WebAPIService apiService = wzqRertofit.create(WebAPIService.class);
Call<Webdata> call = apiService.getData("chick_app");
执行方法
Call<Webdata> callsub = call.clone();
callsub.enqueue(new Callback<Webdata>() {
@Override
public void onResponse(Call<Webdata> call, Response<Webdata> response) {
if (response.isSuccessful()) {
tvContent.setText(response.body().toString());
}
}
@Override
public void onFailure(Call<Webdata> call, Throwable t) {
}
});
为什么要加 call.clone()?
由于call只能被执行一次,所以按照上面的顺序执行会得到如下错误。
java.lang.IllegalStateException: Already executed
我们可以通过clone,来克隆一份call,从新调用
jackLee(简书作者)的一句话特别喜欢:
我们需要牢牢的记住:所有的第三方库能实现的功能,我们使用原生的API只要花时间和精力也能实现,但是可能会出现很多的bug而且会花费较多的时间和精力,而且性能也不一定很好,第三方的库会帮我们封装底层的一些代码,避免我们做重复多余易出错的事情,让我们专注于业务逻辑,所以学习任何一个第三方库都将是简单的,我们不应心生畏惧。