您的位置:首页 > 理论基础 > 计算机网络

Retrofit一个爽到HI的网络加载库

2016-03-25 23:08 585 查看
笔者今天把Retrofit这个库添加到项目中开始使用,使用之后才发现这个库简直爽到爆炸。

它的开源地址: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

只需要你把请求接口写好,那么接下来的请求方法就会变得非常简单,跟着接口文档复制控制器名/方法名,就可以了,哈哈哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: