Retrofit2源码解析(一)
来源:互联网 发布:动画演示制作软件 编辑:程序博客网 时间:2024/05/21 11:42
一、简介
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求,其源码OkHttp Github。在解析源码前先了解retrofit如何使用吧。
二、Retrofit的使用
配置:
- 添加Retrofit依赖: compile 'com.squareup.retrofit2:retrofit:2.0.2'
- 添加数据解析依赖:compile 'com.squareup.retrofit2:converter-gson:2.0.2'
使用步骤:
- 创建JsonBean(可以用工具生成)
把Http Api 转化为 java interface
/*** 对应Http接口的Java Interface类*/public interface HttpApi {@GET("videoHome")Call<HomeResponse> getData();//GET请求方式,请求Url@GET("home")Call<HomeResponse> getHomeData();/*GET 有参数请求:1、可以在url后面直接进行参数拼接,比如 @GET("home?key=value&key2=value2")2、可以用@Query进行参数设置,可以有多个3、可以用@QueryMap进行参数设置用Map集合进行参数*/@GET("home")Call<HomeReponse> getHomeData(@Query("key1") String value1, @Query("key2") String value2);@GET("home")Call<HomeResponse> getHomeData(@QueryMap Map<String, String> params);/*POST 有参数请求:1、可以用@Field进行参数设置,可以有多个2、可以用@FieldMap进行参数设置用Map集合进行参数3、@FormUrlEncoded注解不可少*/@FormUrlEncoded@POST("search")Call<HomeResponse> search(@Field("keyword") String keyword,@Field("page") String page,@Field("pageNum") String pageNum,@Field("orderby") String orderby);@FormUrlEncoded@POST("search")Call<HomeResponse> search(@FieldMap Map<String, String> params);}
3.创建Retrofit对象, 并发起请求.示例代码:
//3.1创建Retrofit实例,进行接口实现retrofit = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create()).build();//3.2 实例化接口类HomeApi homeApi = retrofit.create(HomeApi.class);//3.3 调用接口的方法得到CallCall<HomeResponse> homeResponseCall = homeApi.getHomeData();//3.4 执行数据的请求操作,可以用同步或者是异步的操作//3.4.1 同步操作,耗时操作需要在线程中执行/*try {Response<HomeResponse> homeResponseResponse = homeResponseCall.execute();HomeResponse homeResponse = homeResponseResponse.body();} catch (IOException e) {e.printStackTrace();}*///3.4.2 异步的操作,与okhttp的异步执行不同的是,可以在回掉的方法中进行UI的控制操作homeResponseCall.enqueue(new Callback<HomeResponse>() {@Overridepublic void onResponse(Call<HomeResponse> call, Response<HomeResponse> response) {HomeResponse homeResponse = response.body();textView.setText(homeResponse.toString());textView.setTextColor(Color.GREEN);}@Overridepublic void onFailure(Call<HomeResponse> call, Throwable t) {textView.setText(t.getMessage());textView.setTextColor(Color.RED);}});
常用注解:
请求方法:@GET / @POST / @PUT / @DELETE / @HEADURL处理1、拼接注意,建议baseUrl用“/”结尾,接口中url不用"/"开头例子:baseUrl=http://10.0.2.2:8080/market/ url=home错误案例案例一:baseUrl=http://10.0.2.2:8080/market url=home--->http://10.0.2.2:8080/home分析:默认用最后一个斜线去拼接案例二:baseUrl=http://10.0.2.2:8080/market url=/home--->http://10.0.2.2:8080/home分析:url中开始的斜线代表主机地址http://10.0.2.2:80802、注解:@Path - 替换参数
@GET("{path1}/{path2}")//注意:如果路径用“/”分割,就需要使用多个参数表示
public Call<ResponseData> groupList(@Path("path1") String path1,@Path("path2") String path2);
@Query - 添加查询参数,在GET请求中使用
@GET("home")
Call<HomeResponse> getHomeData(@Query("key1") String value1, @Query("key2") String value2);
@QueryMap - 如果有多个查询参数,把它们放在Map中,在GET请求中使用
@GET("home")
Call<HomeResponse> getHomeData(@QueryMap Map<String, String> params);
@FormUrlEncoded 编码控制 与Post请求结合使用,不能缺少。
@FormUrlEncoded
@POST("search")
Call<SearchResponse> search(
@Field("keyword") String keyword,@Field("page") String page,@Field("pageNum") String pageNum,@Field("orderby") String orderby
);
@FormUrlEncoded
@POST("search")
Call<SearchResponse> search(<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px;">@FieldMap Map<String, String> params
@FieldMap Map<String, String> params
);
本章retrofit的基本用法就介绍到这里,总的来说retrofit使用起来还是很方便的,而且可以一步到位,直接拿到解析的javabean,省去了我们拿json字符串
去解析的工作,下章重点根据retrofit.enque方法这条访问网络的主线去解析retrofit的底层源码。因为第一次写,写的可能不是不太好,但还是希望能帮
到没有使用过但想了解retrofit的朋友,有错误的和表达不准确的地方还请大家多多留言指正。
0 0
- Retrofit2源码解析(一)
- Retrofit2源码解析(一)
- Retrofit2.0源码解析(简版)
- Retrofit2源码解析
- Retrofit2 源码解析
- Retrofit2.0源码解析
- Retrofit2 源码解析
- Retrofit2 源码解析
- Retrofit2 源码解析
- Retrofit2 源码解析
- Retrofit2 源码解析
- Retrofit2 源码解析
- Retrofit2.1源码解析
- Retrofit2 源码解析
- Retrofit2.0源码解析
- Retrofit2 源码解析
- retrofit2源码解析
- Retrofit2.0源码解析
- maven创建多模块项目fREemark+springMVC+mybatis+mybatis 自动生成
- CSS子元素跟父元素的高度一致
- Spring的常用注解讲解
- MAVEN常用命令
- openCV_学习资料
- Retrofit2源码解析(一)
- Maven使用笔记
- 备份SQL数据库
- google正在开发新系统——Fuchsia
- JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
- 逆向分析及识别恶意代码中的AES算法
- Oracle获取两个日期相差的小时
- Caffe编译代码的时候报各种未定义未声明
- Android NFC 对sim卡读写注意事项