Retrofit網絡請求庫應用02——json解析


PS:上一篇寫了Retrofit網絡請求庫的簡單使用,僅僅是獲取百度的源碼,來證明連接成功,這篇講解如何解析JSON數據,該框架不再是我們之前自己寫的那樣用JsonArray等來解析,這些東西,我們都不用寫,只需要寫和數據相關的model就可以,下面是簡單的JSON數據格式,我們來分析一下。

{
    "Xname": "中國",
    "type": "true",
    "province": [
        {
            "name": "黑龍江",
            "city": "哈爾濱"
        },
        {
            "name": "北京",
            "city": "中國"
        }
    ]
}

 首頁也是分步來寫代碼

  •   有JSON數據
  •   根據JSON數據寫model類
  •   導入Retrofit包相關包
  •   添加注入
  •   創建retrofit對象
  •   執行異步處理  

1:有JSON數據

我是用IDEA自己寫的web程序,返回一個JSON數據,如果你們沒有,可以使用字符串,也可以寫一個web項目,只返回JSON數據即可,如果你們不會寫或者不想麻煩可以給我留言,我發給你們。好了,先測試一下接口是否可用    http://10.232.146.59:8080/sjjx.do,因為是本地的,用的是自己的ip。

2:導入Retrofit包相關包

  compile "com.squareup.retrofit2:retrofit:2.1.0"
    compile "com.squareup.retrofit2:converter-gson:2.1.0"
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

 導包的時候要注意,studio2.3以下的可以在搜索框搜不到retrofit的依賴,我的是2.0,直接添加的。所以搜不到也不用太驚訝,畢竟官方文檔寫了環境要求是studio2.3和java7及以上。

3:根據JSON數據寫model類,添加注入。

注入的時候要注意,名字一定要和JSON數據一樣,比如說JSON數據時Xname:中國,這里也一定要寫是@SerializedName("Xname"),否則找不到哦。

package retrofit.cn.myretrofit;

import com.google.gson.annotations.SerializedName;

import java.util.List;

/**
 * Created by cMusketeer on 17/12/12.
 *
 * @author 劉志通
 */
public class Information {
    @SerializedName("Xname")
    public String Xname;
    @SerializedName("type")
    public boolean type;
    @SerializedName("province")
    public List<Address> list;

    public List<Address> getList() {
        return list;
    }

    public void setList(List<Address> list) {
        this.list = list;
    }

    public boolean isType() {
        return type;
    }

    public void setType(boolean type) {
        this.type = type;
    }

    public String getXname() {
        return Xname;
    }

    public void setXname(String xname) {
        Xname = xname;
    }
}

 

 

package retrofit.cn.myretrofit;

import com.google.gson.annotations.SerializedName;

/**
 * Created by cMusketeer on 17/12/12.
 *
 * @author 劉志通
 */
public class Address {
    @SerializedName("name")
    private String name;
    @SerializedName("city")
    private String city;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 4:創建retrofit對象,執行異步處理

我們都知道,上一篇是返回百度的源碼,但是返回的值並不是String類型,是一種二進制流,所以,我又重寫了方法讓他返回String,這里我們是要解析JSON,所以不用再寫返回String了,只需添加這一句就可以.addConverterFactory(GsonConverterFactory.create()),這里baseUrl是我的ip地址+端口,也就是說我訪問的是我自己寫的web程序。是不是很簡單,就這么幾句話就可以解析JSON。

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://10.232.146.59:8080")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Service service = retrofit.create(Service.class);
        Call<Information> baidu = service.getBaidu();
        baidu.enqueue(this);

重寫方法:

 @Override
    public void onResponse(Call<Information> call, Response<Information> response) {

            Log.e("fanhuizhi","返回值是:");
            Log.e("fanhuizhi",response.body()+"");
    }

    @Override
    public void onFailure(Call<Information> call, Throwable t) {
        Log.e("fanhuizhi","出錯了:");
    }

 結果圖:這里是調試運行,按照步驟來即可。成功解析

 


免責聲明!

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



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