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鏈接得到的結果也是這章圖中的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM