本文主要介绍在Retrofit 2.0中,如何将服务器返回的json字符串转换成bean对象。
参考博客:
实现效果:
使用姿势:
1. 使用教程
- 添加依赖
- compile ‘com.squareup.retrofit2:retrofit:2.2.0’
- compile ‘com.squareup.retrofit2:converter-gson:2.2.0’
- AndroidStudio添加Gson插件——GsonFormat
2. 使用API
- 所用api:http://www.mrsorrow.xin/pro/rank_querySpecRankByUniv?university.univCode=10280&page=1
- 功能:根据高校代码进行学科专业类排名
-
返回json如下:
{ "rows": [ { "id": 1893, "specCode": "", "specName": "冶金工程类", "univCode": "10280", "univName": "上海大学", "univRank": "5", "univScore": "78" }, { "id": 328, "specCode": "0303", "specName": "社会学类", "univCode": "10280", "univName": "上海大学", "univRank": "8", "univScore": "77" }, { "id": 828, "specCode": "0503", "specName": "新闻传播学类", "univCode": "10280", "univName": "上海大学", "univRank": "10", "univScore": "77" }, { "id": 3959, "specCode": "1303", "specName": "戏剧与影视学类", "univCode": "10280", "univName": "上海大学", "univRank": "4", "univScore": "77" }, { "id": 396, "specCode": "0305", "specName": "马克思主义理论类", "univCode": "10280", "univName": "上海大学", "univRank": "17", "univScore": "76" } ] }
3. 入门使用Retrofit
-
定义接口(封装URL地址和数据请求) :
@GET("rank_querySpecRankByUniv") Call<ResponseBody> querySpecRankByUniv( @Query("university.univCode") String univCode, @Query("page") int page);
-
实例化Retrofit:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constant.BASE_URL) .build();
-
通过Retrofit实例创建接口服务对象
QueryRankService service = retrofit.create(QueryRankService.class);
-
ResponseBody中存放着我们请求的数据,调用response.body().string()转化为字符串:
Call<ResponseBody> call = service.querySpecRankByUniv("10280", 1); call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if(response.isSuccessful()){ try { String result = response.body().string(); mTextView.setText(result); } catch (IOException e) { e.printStackTrace(); } } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { } });
4. 使用GsonFormat生成Bean
- 新建Bean类——SpecRank.java
- 类中右键Generate–》GsonFormat,将json样例拷贝进AS,点击ok即可
-
生成如下:
5. 使用Gson解析
-
定义接口(封装URL地址和数据请求) :
@GET("rank_querySpecRankByUniv") Call<SpecRankBean> querySpecRankByUnivUseGson( @Query("university.univCode") String univCode, @Query("page") int page);
-
实例化Retrofit:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constant.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build();
-
将请求的数据可以直接转换为我们的Bean,通过各种get方法获取我们想要的数据:
call.enqueue(new Callback<SpecRankBean>() { @Override public void onResponse(Call<SpecRankBean> call, Response<SpecRankBean> response) { if(response.isSuccessful()){ SpecRankBean bean = response.body(); List<SpecRankBean.RowsBean> list = bean.getRows(); String result = ""; for (SpecRankBean.RowsBean rowsBean : list) { result += rowsBean.getUnivName() + rowsBean.getSpecName() + "\n"; } mTextView.setText(result); } } @Override public void onFailure(Call<SpecRankBean> call, Throwable t) { } });
转自:https://blog.csdn.net/bskfnvjtlyzmv867/article/details/70667041