Retrofit2教程,适合初学者(请求道数据解析注意)

RetrofitService类

一、public interfaceRetrofitService {

//请求方式为GET,参数为basil2style,因为没有变量所以下面getString方法也不需要参数

@GET("txt/car.json")

//定义返回的方法,返回的响应体使用了ResponseBody

CallgetString();

}

二、GsonUtils类封装

**

* Gson工具类

* 1,把json转换成Object

* 2,把Object转换成json

* 3,该方法主要功能是将json字符串转换成指定类型的对象

*/

public final classGsonUtils {

/**

* 工具类对象

* (单例)

*/

private static finalGsonUtilsgsonUtils=newGsonUtils();

/**

* Gson对象

*/

private static finalGsongson=newGson();

/**

* 私有构造

*/

privateGsonUtils() {

}

/**

* 对外提供静态公有的方法

*

*@return本类对象

*/

public staticGsonUtilsgetInstance() {

returngsonUtils;

}

/**

* 1,该方法主要功能是将json字符串转换成Java类对象

*

*@paramjson

*            json字符串

*@paramcls

*            Java类的字节码对象

*@return解析后的Java类对象

*@throwsException

*            如果解析中出了问题,或者是json不完整都会抛出这个异常信息

*/

publicTj2O(String json,Class cls)throwsException {

returngson.fromJson(json,cls);

}

/**

* 2,该方法主要功能是将Java类对象转换成json字符串

*

*@paramobj

*            Java对象

*@returnjson字符串

*/

publicStringo2J(Object obj) {

returngson.toJson(obj);

}

/**

* 3,该方法主要功能是将json字符串转换成指定类型的对象

*

*@paramjson

*            json字符串

*@paramtypeOfT

*            指定类型

*@return指定类型的对象

*/

publicTj2T(String json,Type typeOfT)throwsException {

returngson.fromJson(json,typeOfT);

}

}

三、RetrofitAdapter

public classRetrofitAdapterextendsBaseAdapter {

Listdata;

ContextmCtx;

publicRetrofitAdapter(Context mCtx,List data) {

this.mCtx= mCtx;

this.data= data;

}

@Override

public intgetCount() {

if(data!=null) {

returndata.size();

}

return0;

}

@Override

publicObjectgetItem(intposition) {

returndata.get(position);

}

@Override

public longgetItemId(intposition) {

returnposition;

}

@Override

publicViewgetView(intposition,View convertView,ViewGroup viewGroup) {

ViewHolder holder;

if(convertView ==null) {

//把条目布局转化为view对象

convertView = View.inflate(mCtx,R.layout.item_retrofit, null);

//初始化holder对象,并初始化holder中的控件

holder =newViewHolder(convertView);

convertView.setTag(holder);

}else{

//如果当前view存在,则直接从中取出其保存的控件及数据

holder = (ViewHolder) convertView.getTag();

}

//通过position获取当前item的car数据,从car数据中取出title、pubDate和image

CarBean.DataBean car =data.get(position);

holder.llTvTitle.setText(car.getTitle());

holder.llTvTime.setText(car.getPubDate());

//使用SmartImageView的setImageUrl方法下载图片

//  holder.ll_iv_async.setImageUrl(car.image);

Picasso.with(mCtx).load(car.getImage()).into(holder.llIvRetrofit);

returnconvertView;

}

classViewHolder {

@InjectView(R.id.ll_iv_retrofit)

ImageViewllIvRetrofit;

@InjectView(R.id.ll_tv_title)

TextViewllTvTitle;

@InjectView(R.id.ll_tv_time)

TextViewllTvTime;

ViewHolder(View view) {

ButterKnife.inject(this,view);

}

}

}

四、Retrofit2Activity

public classRetrofit2ActivityextendsActivity {

@InjectView(com.tjhq.mygson.R.id.lv_retrofit_gson)

ListViewlvRetrofitGson;

Listdata;

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(com.tjhq.mygson.R.layout.activity_retrofit2);

ButterKnife.inject(this);

initData();

}

private voidinitData() {

initRetrofit();

}

private voidinitRetrofit() {

//获取Retrofit对象,设置地址

Retrofit retrofit =newRetrofit.Builder()

.baseUrl(Constant.BASEURL)

.addConverterFactory(ScalarsConverterFactory.create())

.addConverterFactory(GsonConverterFactory.create())

.build();

RetrofitService retrofitService = retrofit.create(RetrofitService.class);

retrofitService.getString().enqueue(newCallback() {

@Override

public voidonResponse(Call call,Response response) {

//注意这里是拿到的对象需要转换,千万不要 String s = response.body().toString();这样是很严重错误。

//解析一定要把对象转成json,初学者可能这地方有的会出错

String result = GsonUtils.getInstance().o2J(response.body());

Log.e("TAG","获取数据"+result);

Gson gson =newGson();

CarBean carBean = gson.fromJson(result,CarBean.class);

Log.e("TAG","===="+carBean.getPageNo()+"===="+carBean.getPageSize()+"===="+carBean.getTotal());

data=carBean.getData();

RetrofitAdapter retrofitAdapter =newRetrofitAdapter(Retrofit2Activity.this,data);

lvRetrofitGson.setAdapter(retrofitAdapter);

}

@Override

public voidonFailure(Call call,Throwable t) {

}

});

}}

五、CarBean 类


public class CarBean {

/**

* data : [{"articleType":"n","count":29,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/8/14733163729178590_600.jpg","id":"8562073","image":"http://img0.pcauto.com.cn/pcauto/1609/08/g_8562073_1473339813478_240x160.jpg","mtime":1473351348000,"pubDate":"2016-09-09","title":"新福特翼虎购车手册 家用中配足够实用","ups":26,"url":"http://www.pcauto.com.cn/teach/856/8562073.html"},{"articleType":"n","count":37,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1608/31/8655654_toutu_thumb.jpg","id":"8655654","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8655654_1472800030976_240x160.jpg","mtime":1473351337000,"pubDate":"2016-09-09","title":"年轻人第一台车 10万左右精品车型推荐","ups":130,"url":"http://www.pcauto.com.cn/teach/865/8655654.html"},{"articleType":"n","count":35,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/06/8719572_toutu_thumb.jpg","id":"8719572","image":"http://img0.pcauto.com.cn/pcauto/1609/06/g_8719572_1473152785181_240x160.jpg","mtime":1473264982000,"pubDate":"2016-09-08","title":"豪门不\u201c壕\u201d 4款入门豪华SUV仅售23万起","ups":143,"url":"http://www.pcauto.com.cn/teach/871/8719572.html"},{"articleType":"n","count":40,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/1/14727375445822660_600.jpg","id":"8705572","image":"http://img0.pcauto.com.cn/pcauto/1609/07/g_8705572_1473242245557_240x160.jpg","mtime":1473264969000,"pubDate":"2016-09-08","title":"明锐对比英朗 当欧洲绅士遇上美国大汉","ups":52,"url":"http://www.pcauto.com.cn/teach/870/8705572.html"},{"articleType":"n","count":68,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/6/14731526553913750_600.jpg","id":"8719262","image":"http://img0.pcauto.com.cn/pcauto/1609/06/g_8719262_1473151845818_240x160.jpg","mtime":1473153591000,"pubDate":"2016-09-06","title":"新晋英伦长轴距座驾 捷豹XFL实拍解析","ups":299,"url":"http://www.pcauto.com.cn/teach/871/8719262.html"},{"articleType":"n","count":100,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/07/8695292_999_thumb.jpg","id":"8695292","image":"http://img0.pcauto.com.cn/pcauto/1609/01/g_8695292_1472695974218_240x160.jpg","mtime":1473137438000,"pubDate":"2016-09-06","title":"15万元搞定 四款独立后悬挂合资SUV推荐","ups":117,"url":"http://www.pcauto.com.cn/teach/869/8695292.html"},{"articleType":"n","count":84,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/06/8718677_xin1000_thumb.jpg","id":"8718677","image":"http://img0.pcauto.com.cn/pcauto/1609/05/g_8718677_1473061488223_240x160.jpg","mtime":1473092132000,"pubDate":"2016-09-06","title":"8万元选靠谱SUV 4款新推自主车型推荐","ups":91,"url":"http://www.pcauto.com.cn/teach/871/8718677.html"},{"articleType":"n","count":96,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20168/29/14724733055558460_600.jpg","id":"8683971","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8683971_1472803720871_240x160.jpg","mtime":1473005791000,"pubDate":"2016-09-05","title":"凯美瑞对比雅阁 谁才是日系中级车霸主","ups":65,"url":"http://www.pcauto.com.cn/teach/868/8683971.html"},{"articleType":"n","count":136,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/04/8716791_00_thumb.jpg","id":"8716791","image":"http://img0.pcauto.com.cn/pcauto/1609/04/g_8716791_1473002216143_240x160.jpg","mtime":1473005746000,"pubDate":"2016-09-05","title":"精华都在这里 成都车展最值得关注的SUV","ups":390,"url":"http://www.pcauto.com.cn/teach/871/8716791.html"},{"articleType":"n","count":26,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/4/14729794978954170_600.jpg","id":"8716391","image":"http://img0.pcauto.com.cn/pcauto/1609/04/g_8716391_1472979896686_240x160.jpg","mtime":1472980188000,"pubDate":"2016-09-04","title":"2016成都车展:静态评测奔驰新一代威霆","ups":312,"url":"http://www.pcauto.com.cn/teach/871/8716391.html"},{"articleType":"n","count":32,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/01/8700555_8207206_03_thumb.jpg","id":"8700555","image":"http://img0.pcauto.com.cn/pcauto/1609/01/g_8700555_1472716638381_240x160.jpg","mtime":1472919329000,"pubDate":"2016-09-04","title":"入门性价比爆炸 新款致炫购车手册","ups":91,"url":"http://www.pcauto.com.cn/teach/870/8700555.html"},{"articleType":"n","count":70,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14728310541595730_600.jpg","id":"8712133","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8712133_1472831164431_240x160.jpg","mtime":1472832200000,"pubDate":"2016-09-03","title":"2016成都车展:静态评测北京现代胜达","ups":468,"url":"http://www.pcauto.com.cn/teach/871/8712133.html"},{"articleType":"n","count":41,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/02/8710078_1000_thumb.jpg","id":"8710078","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8710078_1472810381352_240x160.jpg","mtime":1472817162000,"pubDate":"2016-09-02","title":"2016成都车展:静态评测新款玛莎拉蒂总裁","ups":299,"url":"http://www.pcauto.com.cn/teach/871/8710078.html"},{"articleType":"n","count":62,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14728116986128820_600.jpg","id":"8711094","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8711094_1472812405190_240x160.jpg","mtime":1472812618000,"pubDate":"2016-09-02","title":"2016成都车展:静态评测大众新桑塔纳","ups":1053,"url":"http://www.pcauto.com.cn/teach/871/8711094.html"},{"articleType":"n","count":28,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14728073809221840_600.jpg","id":"8710334","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8710334_1472807999865_240x160.jpg","mtime":1472808197000,"pubDate":"2016-09-02","title":"2016成都车展:静态体验北京现代悦纳","ups":247,"url":"http://www.pcauto.com.cn/teach/871/8710334.html"},{"articleType":"n","count":31,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14728054816668520_600.jpg","id":"8710116","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8710116_1472805803455_240x160.jpg","mtime":1472806069000,"pubDate":"2016-09-02","title":"2016成都车展:静态评测东南DX3","ups":247,"url":"http://www.pcauto.com.cn/teach/871/8710116.html"},{"articleType":"n","count":60,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14728006933643890_600.jpg","id":"8709146","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8709146_1472801055169_240x160.jpg","mtime":1472801551000,"pubDate":"2016-09-02","title":"2016成都车展:静态评测宝马X1混动版","ups":806,"url":"http://www.pcauto.com.cn/teach/870/8709146.html"},{"articleType":"n","count":87,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14727918621883140_600.jpg","id":"8708181","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8708181_1472793809972_240x160.jpg","mtime":1472794520000,"pubDate":"2016-09-02","title":"2016成都车展:静态评测东风本田竞瑞","ups":533,"url":"http://www.pcauto.com.cn/teach/870/8708181.html"},{"articleType":"n","count":34,"downs":0,"firstImg":"http://img0.pcauto.com.cn/pcauto/1609/02/8704693_toutu_thumb.jpg","id":"8704693","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8704693_1472787714022_240x160.jpg","mtime":1472793542000,"pubDate":"2016-09-02","title":"冲击市场有力竞争者 新科沃兹购车手册","ups":117,"url":"http://www.pcauto.com.cn/teach/870/8704693.html"},{"articleType":"n","count":111,"downs":0,"firstImg":"http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/2/14727803654960920_600.jpg","id":"8706132","image":"http://img0.pcauto.com.cn/pcauto/1609/02/g_8706132_1472781925547_240x160.jpg","mtime":1472781940000,"pubDate":"2016-09-02","title":"7座对标汉兰达 斯柯达KODIAQ实拍解析","ups":104,"url":"http://www.pcauto.com.cn/teach/870/8706132.html"}]

* pageNo : 1

* pageSize : 20

* total : 200

*/

private intpageNo;

private intpageSize;

private inttotal;

privateListdata;

public intgetPageNo() {

returnpageNo;

}

public voidsetPageNo(intpageNo) {

this.pageNo= pageNo;

}

public intgetPageSize() {

returnpageSize;

}

public voidsetPageSize(intpageSize) {

this.pageSize= pageSize;

}

public intgetTotal() {

returntotal;

}

public voidsetTotal(inttotal) {

this.total= total;

}

publicListgetData() {

returndata;

}

public voidsetData(List data) {

this.data= data;

}

public static classDataBean {

/**

* articleType : n

* count : 29

* downs : 0

* firstImg : http://img.pcauto.com.cn/images/pcautogallery/modle/article/20169/8/14733163729178590_600.jpg

* id : 8562073

* image : http://img0.pcauto.com.cn/pcauto/1609/08/g_8562073_1473339813478_240x160.jpg

* mtime : 1473351348000

* pubDate : 2016-09-09

* title : 新福特翼虎购车手册 家用中配足够实用

* ups : 26

* url : http://www.pcauto.com.cn/teach/856/8562073.html

*/

privateStringarticleType;

private intcount;

private intdowns;

privateStringfirstImg;

privateStringid;

privateStringimage;

private longmtime;

privateStringpubDate;

privateStringtitle;

private intups;

privateStringurl;

publicStringgetArticleType() {

returnarticleType;

}

public voidsetArticleType(String articleType) {

this.articleType= articleType;

}

public intgetCount() {

returncount;

}

public voidsetCount(intcount) {

this.count= count;

}

public intgetDowns() {

returndowns;

}

public voidsetDowns(intdowns) {

this.downs= downs;

}

publicStringgetFirstImg() {

returnfirstImg;

}

public voidsetFirstImg(String firstImg) {

this.firstImg= firstImg;

}

publicStringgetId() {

returnid;

}

public voidsetId(String id) {

this.id= id;

}

publicStringgetImage() {

returnimage;

}

public voidsetImage(String image) {

this.image= image;

}

public longgetMtime() {

returnmtime;

}

public voidsetMtime(longmtime) {

this.mtime= mtime;

}

publicStringgetPubDate() {

returnpubDate;

}

public voidsetPubDate(String pubDate) {

this.pubDate= pubDate;

}

publicStringgetTitle() {

returntitle;

}

public voidsetTitle(String title) {

this.title= title;

}

public intgetUps() {

returnups;

}

public voidsetUps(intups) {

this.ups= ups;

}

publicStringgetUrl() {

returnurl;

}

public voidsetUrl(String url) {

this.url= url;

}

}

}

你可能感兴趣的:(Retrofit2教程,适合初学者(请求道数据解析注意))