Diablo3英雄榜-使用Volley和Gson来处理暴雪API的Json数据
使用Volley和Gson来处理Json
暗黑3的API传递给我们的是一个Json数据。现在开始我们尝试来解析它。在百度了一下之后,我初步知道了2个工具。一个是Volley这个是用来获取Json数据。一个是Gson这个是用来解析Json数据。
本章的目标:
- 读取暴雪的API数据
- 解析该数据
使用Volley来获取Json数据
Volley支持原生字符串、图像、Json。可以让我们更专注于应用程序的逻辑。Volley通过下面的方法获取。
$git clone https://android.googlesource.com/platform/framework/volley
在Android Studio 中引用Volley
File->Import Module 然后按着流程来就可以了,如果需要安装什么Android Studio都会自动提示。(注意:需要VPN)
设置依赖关系
如上图,File->Project Structure 或者 Ctrl+Alt+Shift+S
点击app,然后点击最右边绿色+号选择Module dependency,然后选择Volley。现在开始就可以正常的使用Volley了。敲完代码后一路Alt+Enter。代码就能够正常运行了。
在这个应用中我们现在要的到一个英雄角色的装备数据,我们使用如下API
http://tw.battle.net/api/d3/profile/kakyban-3879/hero/26135206
这段Json的数据大概如下
我们在程序中的代码为
String url = "json的地址";
RequestQueue queue = Volley.newRequestQueue(getActivity());
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//这里的response就是返回的Json数据
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//如果执行到这里,说明Volley没有正常工作
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
Debug查看一下,数据没有问题。
使用Gson来解析Json字符串
Gson我使用它主要的原因可能就是我的Android Studio里面貌似是集成的,我直接就引用了。当然设置依赖还是必须的,参考Volley的设置。
示例的Json代码为:
http://tw.battle.net/api/d3/profile/kakyban-3879/hero/26135206
这是http://tw.battle.net上的真实数据,大家随时都可以查看。
Json的结构是这个样子的
首先我们要创建一个类Hero,它包含id、name、class等字段,注意class是保留字,所以我更名为class1,并且加入了@SerializedName("class")意思是将Json里面的class字段映射为class1。还有包含"-"特殊符号的last-updated我映射为了lastupdated。一个总类我定义为Hero,Hero里面包含了skills,items,followers,stats,kills,progression类,我们首先只实现Hero和items。
public class Hero{
@SerializedName("class")
private String class1;
private boolean dead;
private Followers followers;
private Number gender;
private boolean hardcore;
private Number id;
private Items items;
private Kills kills;
@SerializedName("last-updated")
private Number lastupdated;
private Number level;
private String name;
private Number paragonLevel;
private Number seasonCreated;
private boolean seasonal;
private Skills skills;
private Stats stats;
public String getClass1(){
return this.class1;
}
public void setClass1(String class1){
this.class1 = class1;
}
public boolean getDead(){
return this.dead;
}
public void setDead(boolean dead){
this.dead = dead;
}
public Followers getFollowers(){
return this.followers;
}
public void setFollowers(Followers followers){
this.followers = followers;
}
public Number getGender(){
return this.gender;
}
public void setGender(Number gender){
this.gender = gender;
}
public boolean getHardcore(){
return this.hardcore;
}
public void setHardcore(boolean hardcore){
this.hardcore = hardcore;
}
public Number getId(){
return this.id;
}
public void setId(Number id){
this.id = id;
}
public Items getItems(){
return this.items;
}
public void setItems(Items items){
this.items = items;
}
public Kills getKills(){
return this.kills;
}
public void setKills(Kills kills){
this.kills = kills;
}
public Number getLastupdated(){
return this.lastupdated;
}
public void setLastupdated(Number lastupdated){
this.lastupdated = lastupdated;
}
public Number getLevel(){
return this.level;
}
public void setLevel(Number level){
this.level = level;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public Number getParagonLevel(){
return this.paragonLevel;
}
public void setParagonLevel(Number paragonLevel){
this.paragonLevel = paragonLevel;
}
public Number getSeasonCreated(){
return this.seasonCreated;
}
public void setSeasonCreated(Number seasonCreated){
this.seasonCreated = seasonCreated;
}
public boolean getSeasonal(){
return this.seasonal;
}
public void setSeasonal(boolean seasonal){
this.seasonal = seasonal;
}
public Skills getSkills(){
return this.skills;
}
public void setSkills(Skills skills){
this.skills = skills;
}
public Stats getStats(){
return this.stats;
}
public void setStats(Stats stats){
this.stats = stats;
}
}
Items很长
大概为上图这个样子。解析数据的代码如下:
Gson gson = new Gson();
Hero mHero = gson.fromJson(json, Hero.class);
Json为json字符串。如果你只实现了Hero,Items2个类,那么Gson会自动根据对应的字段映射数据。在调试器中查看如下图所示,数据很成功。
注意:Items是一个很大的bean 在bean里面的类必须是static的。
小结:
本文纯粹只是讲述了如何从暴雪的Api中读取数据,并且解析成类。所有的方法都不是最好的。比如Gson,当我做完了才发现fastJson貌似更快。fastJson是阿里的工程师设计的一个库,不依赖其他的第三方库,速度是Gson的6倍。
所有的一切都只是为了实现类似下面的效果:
本篇文章所对应的API链接得到的结果也是这章图中的数据。
转载于:https://www.cnblogs.com/canglin/p/4404423.html
Diablo3英雄榜-使用Volley和Gson来处理暴雪API的Json数据相关推荐
- Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)
JSON介绍: JSON:JavaScript对象表示法 JSON是存储和交换文本信息的语法. 特点: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更易理解 ...
- gson生成jsonobject_GSON形式生成和解析json数据
GSON 方式生成和解析 json 数据 客户端与服务器进行数据交互时, 常常需要将数据在服务器端将数据转化成字符串并在客户 端对 json 数据进行解析生成对象. 但是用 jsonObject 和 ...
- Android中关于Volley的使用(二)加载Json数据
前面一篇关于Volley的文章中,我们学习了如何利用ImageRequest去网络中加载图片,那么今天我们就来学习一下如何利用volley去网络中加载Json格式数据,并将其展示在一个ListView ...
- JSONObject 和 GSON 解析 JSON 数据详解(转)
转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...
- Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)
Android:JSON 简介 & 解析方式 讲解(Gson.AS自带org.json.Jackson) 前言 现今最主流的数据交换格式 非 JSON莫属 今天,我将全面介绍 JSON &am ...
- gson 解析json_Gson示例教程解析JSON
gson 解析json Welcome to Gson Example Tutorial. In last post we looked at the Java JSON API and you ca ...
- android 快速解析json数据搭配Gson库中Android Studio插件 GsonFormat
转:https://www.jianshu.com/p/d34c5e7c8227 更简洁的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果对json解析 ...
- Okhttp、Volley和Gson的简单介绍和配合使用
1.okhttp是一个高效的.快速的被谷歌认可的,支持HTTP/2和SPDY volley是一个方便网络任务库,可以负责请求.加载.缓存等同步问题,也可以处理图片.JSON.文本操作起来比较简单 gs ...
- gson解析mysql城市json数据_Gson解析复杂的json数据
首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些: 1 public classJsonBean {2 publicString a;3 public Listb;4 ...
- Android Volley 库通过网络获取 JSON 数据
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...
最新文章
- 电脑看不到光驱盘符,应该如何解决
- Android的.apk软件安装到sd卡的方法
- html界面等待状态,html 等待界面
- c语言用switch字母判断星期几,c语言程序,输入年月日,判断这一天是这一年的第几天,同时判断这一天是星期几。(用switch语句)...
- python调用jar包的模块_使用 Python 的 JPype 模块调用 Jar 包
- Spark 堆外内存
- 线性代数 矩阵 知识技巧思维导图 [21考研上岸之旅]
- 记录甘肃机顶盒MG101_U2破解之路的辛酸历程
- Photoshop CS6 破解
- python购买股票_Python|买卖股票的最佳时机
- 互联网日报 | 蚂蚁集团10月27日网上路演;快手小程序开放内测邀请;苏宁战队晋级英雄联盟S10决赛...
- gif图片过大怎么压缩?gif图怎么压缩大小?
- Windows8.1设置默认输入法为英文
- Python正则表达式(菜鸡版)
- 应用机器学习 Applied Machine Learning (AML) ppt2
- 【ES6】阮一峰ES6学习之Module的语法
- 干支纪年java_天干地支纪年法 - osc_xcg0s5cw的个人空间 - OSCHINA - 中文开源技术交流社区...
- 以下对微型计算机系统的描述正确的是什么,以下对微型计算机汉字系统描述正确的是()...
- LintCode领扣算法问题答案:149. 买卖股票的最佳时机
- 一本晚看了两年半的书--蓝海战略
热门文章
- 流传千古的爱情传说原来竟是一个先劫色后劫财的骗局
- CentOS配置静态IP地址
- 瞬态抑制二极管(Tvs)和快恢复/超快恢复二极管的学习
- 包子笔记 - 关于沉没成本
- 数字麦克风PDM信号采集与STM32 I2S接口应用(三)
- grep的-A-B(使用grep显示keyword前后的内容)
- Hdu-5769 Substring (SA后缀数组)
- RT-Thread学习笔记——事件集
- (转)前端文摘:深入解析浏览器的幕后工作原理
- mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?