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链接得到的结果也是这章图中的数据。

时间: 2024-10-12 07:54:25

Diablo3英雄榜-使用Volley和Gson来处理暴雪API的Json数据的相关文章

使用Gson解析复杂、变态的Json数据

接口文档: app配置 接口 client/init 请求数据 json={"uid":"","sid":"","ver":"1", "request":{} } 返回数据 {"ret":0, "response":{ "tag_category":{ "中国画":{ "年代&q

Diablo3 英雄榜-显示用户的装备信息-Volley读取API的图片资源,使用MySingleton管理RequestQueue

Diablo3 英雄榜-显示用户的装备信息 -Volley读取API的图片资源 本章目标: 使用一个类来管理RequestQueue 完成Diablo3英雄榜的装备界面概览界面 进一步的熟悉暴雪API 源起 在之前我们提到过使用Volley获取Json数据.参看 Diablo3英雄榜-使用Volley和Gson来处理暴雪API的Json数据 在返回的数据不是立刻返回的.返回后的事件事实上是在onResponse()中来处理.现在我们要实现多个资源同时来请求,每个请求都有自己的Request,那么

利用Gson将JSON数据进行格式化(pretty print)

我们可以利用Gson包将String类型的JSON数据进行格式化. Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJSONString); String prettyJsonString = gson.toJson(je); 使用 new GsonBuilder.setPrettyPrinting

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

转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数据网络和线程系列目录导图 本节例程下载地址:WillFLowJSON 一.JSON简介 我们之前已经掌握了 XML 格式数据的解析方式,那么接下来我们要去学习一下如何解析 JSON 格式的数据,在学习之前,我们先将这两者做一个简单的比较. XML与JSON的对比: JSON和XML的数据可读性基本相

Diablo3英雄榜-进度条

Diablo3英雄榜-进度条 目标 在发呆的时候添加一个进度条 使用第三方控件 Fragment之间的通信 Handler的使用 源起 在读取魔兽英雄榜数据的时候,有时候会有很多个网络请求,但是网络的速度永远是无法预估的.这个时候有一个进度条是极好的.我们在前一篇文章中,我们读取了用户信息和用户的装备信息.在读取信息的时候使用了27个Request.这个时候应用有一点点顿.为了让顿的时候有更好的体验,我们加入了一个进度条.我添加了一个第三方控件,用于在等待.做出来的效果是这个样子的. 这个进度条

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

转载自:http://www.apkbus.com/home.php?mod=space&uid=784586&do=blog&id=61255 1.okhttp是一个高效的.快速的被谷歌认可的,支持HTTP/2和SPDY volley是一个方便网络任务库,可以负责请求.加载.缓存等同步问题,也可以处理图片.JSON.文本操作起来比较简单 gson是JSON序列化和反序列化(以上三个能相互间轻松使用主要还是因为okhttp是谷歌推荐的.volley是谷歌开发的.Gson是谷歌开发的

使用Gson解析复杂的json数据

Gson解析复杂的json数据 最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject和JsonArray的配合使用,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候这种方法就显得比较吃力也比较麻烦了,如果大家感兴趣的话网上有大量的实例可以到网上去看看. 在这里我将介绍解析json数据的另外一种方法就是通过Gson解析,

Gson解析复杂的json数据

最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject和JsonArray的配合使用,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候这种方法就显得比较吃力也比较麻烦了,如果大家感兴趣的话网上有大量的实例可以到网上去看看. 在这里我将介绍解析json数据的另外一种方法就是通过Gson解析,对于解析比较简单的json数据我

Android JSON数据解析(GSON方式)

要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据. 1.GSON的两个重要方法 在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法.其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换