使用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数据相关推荐

  1. Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)

    JSON介绍: JSON:JavaScript对象表示法 JSON是存储和交换文本信息的语法. 特点: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更易理解 ...

  2. gson生成jsonobject_GSON形式生成和解析json数据

    GSON 方式生成和解析 json 数据 客户端与服务器进行数据交互时, 常常需要将数据在服务器端将数据转化成字符串并在客户 端对 json 数据进行解析生成对象. 但是用 jsonObject 和 ...

  3. Android中关于Volley的使用(二)加载Json数据

    前面一篇关于Volley的文章中,我们学习了如何利用ImageRequest去网络中加载图片,那么今天我们就来学习一下如何利用volley去网络中加载Json格式数据,并将其展示在一个ListView ...

  4. JSONObject 和 GSON 解析 JSON 数据详解(转)

    转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...

  5. Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)

    Android:JSON 简介 & 解析方式 讲解(Gson.AS自带org.json.Jackson) 前言 现今最主流的数据交换格式 非 JSON莫属 今天,我将全面介绍 JSON &am ...

  6. gson 解析json_Gson示例教程解析JSON

    gson 解析json Welcome to Gson Example Tutorial. In last post we looked at the Java JSON API and you ca ...

  7. android 快速解析json数据搭配Gson库中Android Studio插件 GsonFormat

    转:https://www.jianshu.com/p/d34c5e7c8227 更简洁的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果对json解析 ...

  8. Okhttp、Volley和Gson的简单介绍和配合使用

    1.okhttp是一个高效的.快速的被谷歌认可的,支持HTTP/2和SPDY volley是一个方便网络任务库,可以负责请求.加载.缓存等同步问题,也可以处理图片.JSON.文本操作起来比较简单 gs ...

  9. gson解析mysql城市json数据_Gson解析复杂的json数据

    首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些: 1 public classJsonBean {2 publicString a;3 public Listb;4 ...

  10. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

最新文章

  1. 电脑看不到光驱盘符,应该如何解决
  2. Android的.apk软件安装到sd卡的方法
  3. html界面等待状态,html 等待界面
  4. c语言用switch字母判断星期几,c语言程序,输入年月日,判断这一天是这一年的第几天,同时判断这一天是星期几。(用switch语句)...
  5. python调用jar包的模块_使用 Python 的 JPype 模块调用 Jar 包
  6. Spark 堆外内存
  7. 线性代数 矩阵 知识技巧思维导图 [21考研上岸之旅]
  8. 记录甘肃机顶盒MG101_U2破解之路的辛酸历程
  9. Photoshop CS6 破解
  10. python购买股票_Python|买卖股票的最佳时机
  11. 互联网日报 | 蚂蚁集团10月27日网上路演;快手小程序开放内测邀请;苏宁战队晋级英雄联盟S10决赛...
  12. gif图片过大怎么压缩?gif图怎么压缩大小?
  13. Windows8.1设置默认输入法为英文
  14. Python正则表达式(菜鸡版)
  15. 应用机器学习 Applied Machine Learning (AML) ppt2
  16. 【ES6】阮一峰ES6学习之Module的语法
  17. 干支纪年java_天干地支纪年法 - osc_xcg0s5cw的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. 以下对微型计算机系统的描述正确的是什么,以下对微型计算机汉字系统描述正确的是()...
  19. LintCode领扣算法问题答案:149. 买卖股票的最佳时机
  20. 一本晚看了两年半的书--蓝海战略

热门文章

  1. 流传千古的爱情传说原来竟是一个先劫色后劫财的骗局
  2. CentOS配置静态IP地址
  3. 瞬态抑制二极管(Tvs)和快恢复/超快恢复二极管的学习
  4. 包子笔记 - 关于沉没成本
  5. 数字麦克风PDM信号采集与STM32 I2S接口应用(三)
  6. grep的-A-B(使用grep显示keyword前后的内容)
  7. Hdu-5769 Substring (SA后缀数组)
  8. RT-Thread学习笔记——事件集
  9. (转)前端文摘:深入解析浏览器的幕后工作原理
  10. mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?