Retrofit框架
来源:互联网 发布:华为 网络管理 编辑:程序博客网 时间:2024/05/22 06:47
历史由来:
随着Google对HttpClient的摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖。Retrofit也是Square公司开发的一款针对Android网络请求的框架,其实质就是对okHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口。retrofit非常适合于RESTful url格式的请求,更多使用注解的方式提供功能。
既然是RESTful架构,那么我们就来看一下什么是REST吧。
REST(REpresentational State Transfer)是一组架构约束条件和原则。RESTful架构都满足以下规则:
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词(GET,POST,PUT,DELETE),对服务器端资源进行操作,实现”表现层状态转化”。
使用Retrofit2.0
依赖注意事项:
1.Retrofit必须使用okhttp请求了,如果项目中没有okhttp的依赖的话,肯定会出错 。
2.okhttp内部依赖okio所以也要添加。
用法介绍
创建API接口
在retrofit中通过一个Java接口作为http请求的api接口。
//定以接口public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user);}
创建retrofit实例
/**获取实例*/Retrofit retrofit = new Retrofit.Builder() //设置OKHttpClient,如果不设置会提供一个默认的 .client(new OkHttpClient()) //设置baseUrl .baseUrl("https://api.github.com/") //添加Gson转换器 .addConverterFactory(GsonConverterFactory.create()) .build();
注:
1.retrofit2.0后:BaseUrl要以/结尾;@GET 等请求不要以/开头;@Url: 可以定义完整url,不要以 / 开头。
2.addConverterFactory提供Gson支持,可以添加多种序列化Factory,但是GsonConverterFactory必须放在最后,否则会抛出异常。
调用API接口
GitHubService service = retrofit.create(GitHubService.class);//同步请求//https://api.github.com/users/octocat/reposCall<List<Repo>> call = service.listRepos("octocat");try { Response<List<Repo>> repos = call.execute();} catch (IOException e) { e.printStackTrace();}//不管同步还是异步,call只能执行一次。否则会抛 IllegalStateExceptionCall<List<Repo>> clone = call.clone();//异步请求clone.enqueue(new Callback<List<Repo>>() { @Override public void onResponse(Response<List<Repo>> response, Retrofit retrofit) { // Get result bean from response.body() List<Repo> repos = response.body(); // Get header item from response String links = response.headers().get("Link"); /** * 不同于retrofit1 可以同时操作序列化数据javabean和header */ } @Override public void onFailure(Throwable throwable) { showlog(throwable.getCause().toString()); }});
取消请求
我们可以终止一个请求。终止操作是对底层的httpclient执行cancel操作。即使是正在执行的请求,也能够立即终止。
call.cancel();
retrofit注解
(1)方法注解,包含@GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。
(2)标记注解,包含@FormUrlEncoded、@Multipart、@Streaming。
(3)参数注解,包含@Query、@QueryMap、@Body、@Field,@FieldMap、@Part,@PartMap。
(4)其他注解,包含@Path、@Header、@Headers、@Url。
使用例子:
一般的get请求
public interface IWeatherGet { @GET("GetMoreWeather?cityCode=101020100&weatherType=0") Call<Weather> getWeather();}
可以看到有一个getWeather()方法,通过@GET注解标识为get请求,@GET中所填写的value和baseUrl组成完整的路径,baseUrl在构造retrofit对象时给出。
Retrofit retrofit = new Retrofit.Builder() /**http://weather.51wnl.com/weatherinfo/GetMoreWeather?cityCode=101020100&weatherType=0*/ //注意baseurl要以/结尾 .baseUrl("http://weather.51wnl.com/weatherinfo/") .addConverterFactory(GsonConverterFactory.create()) .build();IWeatherGet weather = retrofit.create(IWeatherGet.class);Call<Weather> call = weather.getWeather();call.enqueue(new Callback<Weather>() { @Override public void onResponse(Response<Weather> response, Retrofit retrofit) { Weather weather = response.body(); WeatherInfo weatherinfo = weather.weatherinfo; showlog("weather="+weatherinfo.toString()); }@Override public void onFailure(Throwable throwable) { showlog(throwable.getCause().toString()); }});
关于Retrofit2在Github上的例子
这里是大神的详细介绍
- Retrofit框架
- Retrofit框架
- Retrofit框架使用笔记
- 网络框架 Retrofit
- retrofit框架探究(一)
- retrofit框架探究(二)
- retrofit框架探究(三)
- Retrofit框架基本使用
- RxJava+Retrofit框架Demo
- Retrofit网络框架搭建
- 使用retrofit框架
- Retrofit框架基本封装
- Retrofit框架的使用
- retrofit网络请求框架
- Android Retrofit框架解析
- retrofit网络框架
- Retrofit网络框架搭建
- Android Retrofit框架解析
- 在Fragment中拦截BACK返回键,具体实现
- 压力负载测试的一些经验之谈
- express 接口异常错误不影响其他接口,正常返回数据
- U-Boot学习笔记(二):U-Boot--arm--Start.S的分析
- DNS
- Retrofit框架
- 从无到有系列之storm-windows下demo运行02
- 去掉cell前端15像素
- intValue()的用法
- 未找到类型或命名空间名称" " (是否缺少 using 指令或程序集引用?)
- centos 安装rabbitmq 非常好
- 使用servlet重定向返回gson字符串 在IE中解析缓慢
- mongoengine连接数据库错误
- OkHttp3的使用记录(下)