Retrofit一个爽到HI的网络加载库
2016-03-25 23:08
585 查看
笔者今天把Retrofit这个库添加到项目中开始使用,使用之后才发现这个库简直爽到爆炸。
它的开源地址:https://github.com/square/retrofit
这是笔者在开发项目时的接口文档
全局接口地址 http://192.168.0.110/lepa/api/web/controller/method
http://192.168.0.110:80/lepa/api/web/固定不变的
controller/method 是动态的
controller :当前请求的控制器
method :当前请求的方法名称
例如,在请求商城主页的时候,需要请求的地址是:
http://192.168.0.110/lepa/api/web/site/index
在请求商城商品分类的时候,地址是:
http://192.168.0.110/lepa/api/web/goods/get-goods-list
控制器和方法名是会改变,也就是后面的两项。
手机在提交数据的时候还会提交一些其他的表单值,如token之类,还有请求头headers。那么,使用Retrofit来请求,这些都变得及其容易。
@Headers里设置请求头信息,@GET表示get请求,@Path表示可变的路径,@Query设置提交的数据。MallBean和AdvertBean是笔者根据json转的实体类,在这里你可以使用android studio的一个插件,一键完成转换,插件名“GsonFormat”。getResult和getAdvertResult是自定定义的方法名。
GsonConverterFactory是自动用Gson转换工具。
贴上笔者需要解析json数据:
通过以下方法开始请求:
在调用
的时候,也就是相当于请求如下地址:
http://192.168.0.110/lepa/api/web/site/adv-slide?api_token=xxxxx
只需要你把请求接口写好,那么接下来的请求方法就会变得非常简单,跟着接口文档复制控制器名/方法名,就可以了,哈哈哈。
它的开源地址:https://github.com/square/retrofit
如何开始使用:
①添加依赖
compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.squareup.retrofit2:retrofit:2.0.0'
②开始使用
首先先来一个请求地址作为参考:这是笔者在开发项目时的接口文档
全局接口地址 http://192.168.0.110/lepa/api/web/controller/method
http://192.168.0.110:80/lepa/api/web/固定不变的
controller/method 是动态的
controller :当前请求的控制器
method :当前请求的方法名称
例如,在请求商城主页的时候,需要请求的地址是:
http://192.168.0.110/lepa/api/web/site/index
在请求商城商品分类的时候,地址是:
http://192.168.0.110/lepa/api/web/goods/get-goods-list
控制器和方法名是会改变,也就是后面的两项。
手机在提交数据的时候还会提交一些其他的表单值,如token之类,还有请求头headers。那么,使用Retrofit来请求,这些都变得及其容易。
1)创建一个请求接口
public interface MallRequest { @Headers({ "User-Agent: Android" }) @GET("{controller}/{method}") Call<MallBean> getResult( @Path("controller") String controller, @Path("method") String method, @Query("api_token") String api_token); @GET("{controller}/{method}") Call<AdvertBean> getAdvertResult( @Path("controller") String controller, @Path("method") String method, @Query("api_token") String api_token ); }
@Headers里设置请求头信息,@GET表示get请求,@Path表示可变的路径,@Query设置提交的数据。MallBean和AdvertBean是笔者根据json转的实体类,在这里你可以使用android studio的一个插件,一键完成转换,插件名“GsonFormat”。getResult和getAdvertResult是自定定义的方法名。
2)创建请求对象
Retrofit mRetrofit = new Retrofit.Builder() .baseUrl("http://192.168.0.110/lepa/api/web/") .addConverterFactory(GsonConverterFactory.create()) .build(); MallRequest mMallRequest = mRetrofit.create(MallRequest.class);
GsonConverterFactory是自动用Gson转换工具。
贴上笔者需要解析json数据:
{ "code": "success", "message": "success!", "data": [ { "a_id": "8", "sort": "0", "pic_url": "http://192.168.0.110/res/upload/image/default/2016/01/271453863969128320.png", "repeat": "mod=details&id=42" }, { "a_id": "13", "sort": "0", "pic_url": "http://192.168.0.110/res/upload/image/default/2016/01/271453863968246399.png", "repeat": "mod=details&id=43" }, { "a_id": "15", "sort": "0", "pic_url": "http://192.168.0.110/res/upload/image/default/2016/01/271453863969109055.png", "repeat": "mod=details&id=4" }, { "a_id": "14", "sort": "3", "pic_url": "http://192.168.0.110/res/upload/image/default/2016/01/271453863969115987.png", "repeat": "mod=list&id=40" } ] }
通过以下方法开始请求:
Call<AdvertBean> call = mMallRequest.getAdvertResult("site", "adv-slide", LepaApiToken.getToken("site", "adv-slide")); call.enqueue(new Callback<AdvertBean>() { @Override public void onResponse(Call<AdvertBean> call, retrofit2.Response<AdvertBean> response) { if (response.isSuccessful()) { Log.d("debug", "response" + response.body().getData().get(2).getPic_url()); if (response.body().getCode().equals("success")) { int dataCount = response.body().getData().size(); List<Map<String, String>> list = new ArrayList<>(); Map<String, String> map; for (int i = 0; i < dataCount; i++) { map = new HashMap<>(); map.put("a_id", response.body().getData().get(i).getA_id()); map.put("sort", response.body().getData().get(i).getSort()); map.put("pic_url", response.body().getData().get(i).getPic_url()); map.put("repeat", response.body().getData().get(i).getRepeat()); list.add(map); } AdvertPagerAdapter adapter = new AdvertPagerAdapter(getActivity(), list); viewpager_tabmall_showAdvert.setAdapter(adapter); indicator_tabmall.setViewPager(viewpager_tabmall_showAdvert); } } } @Override public void onFailure(Call<AdvertBean> call, Throwable t) { Log.d("debug", "error" + t.toString()); } });
在调用
Call<AdvertBean> call = mMallRequest.getAdvertResult("site", "adv-slide", LepaApiToken.getToken("site", "adv-slide"));
的时候,也就是相当于请求如下地址:
http://192.168.0.110/lepa/api/web/site/adv-slide?api_token=xxxxx
只需要你把请求接口写好,那么接下来的请求方法就会变得非常简单,跟着接口文档复制控制器名/方法名,就可以了,哈哈哈。
相关文章推荐
- android网络技术-使用 HTTP协议访问网络
- import javax.servlet.http.HttpServletRequest和import javax.servlet.http.HttpServletResponse报错
- HTTP请求数据类型
- adb网络调试
- 网络基本概念之TCP, UDP, 单播(Unicast), 多播(组播)(Multicast)
- http-equiv="X-UA-Compatible" 设置IE浏览器兼容模式
- android网络技术-WebView的用法
- 仿知乎日报列表-加载网络数据
- Ubuntu下的抓包工具tcpdump
- tcpdump抓取HTTP包
- 20159217《网络攻防实践》第四周学习总结
- linux设置网络传输包mtu
- virtualbox centos 静态网络配置
- Java网络编程(UDP协议:接收端)
- Java网络编程(UDP协议:发送端)
- Xcode7(iOS9 beta1)网络请求失败,配置info.plist文件解决--iOS开发
- Http协议访问DataSnap Rest 服务器 - 封三郎
- 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密
- VMWaer克隆centos后网络的问题解决
- TCP/IP的网际层