天天看點

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

Android Studio配置與使用Gson架構解析json資料

[toc]

這裡使用一個關聯的spinner來示範何如使用Gson解析json資料

一、配置gson環境

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

單擊Open Module Settings

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

單擊Dependencies,點選右邊的綠色加号

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

選擇選項的第一個Library Dependency

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

輸入GSON關鍵字,點選搜尋

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

這裡選擇一個合适的版本,然後點選OK

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

這時候gson架構就加載好了

二、安裝GSON插件

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料
Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料
Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

注意插件安裝完畢後請重新開機Android Studio

三、使用Gson插件生成Java Bean類

在src/main目錄下(與java和res同級的目錄下建立一個assets檔案夾)

在此檔案夾下複制一個地區編号的json檔案

百度雲下載下傳位址:http://pan.baidu.com/s/1hrRAeCO

再建立一個bean包

包下建立一個名為AddrBean的類

在此類檔案的任何位置右鍵

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料
Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

在彈出的對話框中将剛才下載下傳檔案的内容複制到這裡

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料
Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

注意,這裡自動生成的是中文的屬性名,為了友善使用,我們将屬性重命名

Android Studio配置與使用GSON架構解析json資料Android Studio配置與使用Gson架構解析json資料

然後單擊下一步,一個Bean類就建立出來了

package com.doservlet.bean;

import com.google.gson.annotations.SerializedName;

import java.util.List;

/**
 * Created by 陳小默
 * http://my.oschina.net/oschenxiaomo/blog
 * http://blog.csdn.net/qq_32583189
 */
public class AddrBean {

    @SerializedName("城市代碼")
    private List<ProvinceBean> provinceList;

    public List<ProvinceBean> getProvinceList() {
        return provinceList;
    }

    public void setProvinceList(List<ProvinceBean> provinceList) {
        this.provinceList = provinceList;
    }

    public static class ProvinceBean {
        @SerializedName("省")
        private String province;
        /**
         * 市名 : 北京
         * 編碼 : 101010100
         */

        @SerializedName("市")
        private List<CityBean> cityList;

        public String getProvince() {
            return province;
        }

        public void setProvince(String province) {
            this.province = province;
        }

        public List<CityBean> getCityList() {
            return cityList;
        }

        public void setCityList(List<CityBean> cityList) {
            this.cityList = cityList;
        }

        public static class CityBean {
            @SerializedName("市名")
            private String cityName;
            @SerializedName("編碼")
            private String cityCode;

            public String getCityName() {
                return cityName;
            }

            public void setCityName(String cityName) {
                this.cityName = cityName;
            }

            public String getCityCode() {
                return cityCode;
            }

            public void setCityCode(String cityCode) {
                this.cityCode = cityCode;
            }
        }
    }
}
           

四、建立一個布局檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.doservlet.activity.WeatherActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Spinner
            android:id="@+id/province_list"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1"></Spinner>

        <Spinner
            android:id="@+id/city_list"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1"></Spinner>
    </LinearLayout>
</LinearLayout>
           

五、為spinner建立擴充卡

顯示省份的擴充卡

package com.doservlet.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.doservlet.bean.AddrBean;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by 陳小默
 */
public class ProvinceAdapter extends BaseAdapter {

    private Context context;

    public ProvinceAdapter(Context context) {
        this.context = context;
    }

    private List<AddrBean.ProvinceBean> provinceBeanList = new ArrayList<>();

    public void setProvinceBeanList(List<AddrBean.ProvinceBean> provinceBeanList) {
        this.provinceBeanList = provinceBeanList;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return provinceBeanList.size();
    }

    @Override
    public Object getItem(int position) {
        return provinceBeanList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView tv = new TextView(context);
        tv.setText(provinceBeanList.get(position).getProvince());
        return tv;
    }
}
           

市的擴充卡

package com.doservlet.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.doservlet.bean.AddrBean;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by 陳小默 on 2016/5/20.
 */
public class CityAdapter extends BaseAdapter {
    private Context context;
    private List<AddrBean.ProvinceBean.CityBean> cityBeanList = new ArrayList<>();

    public void setCityBeanList(List<AddrBean.ProvinceBean.CityBean> cityBeanList) {
        this.cityBeanList = cityBeanList;
        notifyDataSetChanged();
    }

    public CityAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return cityBeanList.size();
    }

    @Override
    public Object getItem(int position) {
        return cityBeanList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView tv = new TextView(context);
        tv.setText(cityBeanList.get(position).getCityName());
        return tv;
    }
}
           

六、在Activity中解析資料

package com.doservlet.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;

import com.doservlet.adapter.CityAdapter;
import com.doservlet.adapter.ProvinceAdapter;
import com.doservlet.bean.AddrBean;
import com.doservlet.bean.Weather;
import com.doservlet.xutilsdemo.R;
import com.google.gson.GsonBuilder;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

import java.io.InputStream;
import java.io.InputStreamReader;

public class WeatherActivity extends AppCompatActivity {
    private Spinner spProvince, spCity;
    private AddrBean addrBean;
    private ProvinceAdapter adpProvince;
    private CityAdapter adpCity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_weather);
        initView();
        loadData();
        register();
    }

    private void register() {
        spProvince.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                adpCity.setCityBeanList(addrBean.getProvinceList().get(position).getCityList());
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    private void loadData() {
        try {
            InputStream inputStream = getApplicationContext().getAssets().open("addr_china.json");

            addrBean = new GsonBuilder().create().fromJson(new InputStreamReader(inputStream), AddrBean.class);

            spProvince.setAdapter(adpProvince);
            adpProvince.setProvinceBeanList(addrBean.getProvinceList());

            spCity.setAdapter(adpCity);
            adpCity.setCityBeanList(addrBean.getProvinceList().get().getCityList());
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    private void initView() {
        spCity = (Spinner) findViewById(R.id.city_list);
        spProvince = (Spinner) findViewById(R.id.province_list);

        adpProvince = new ProvinceAdapter(this);
        adpCity = new CityAdapter(this);
    }
}
           

好了現在運作就能看到關聯的結果了

  • Android Studio配置與使用Gson架構解析json資料
    • 一配置gson環境
    • 二安裝GSON插件
    • 三使用Gson插件生成Java Bean類
    • 四建立一個布局檔案
    • 五為spinner建立擴充卡
    • 六在Activity中解析資料