首页 > Windows开发 > 详细

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

时间:2015-04-08 23:13:56      阅读:367      评论:0      收藏:0      [点我收藏+]

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

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

原文:http://www.cnblogs.com/canglin/p/4404423.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!