Android Studio配置與使用Gson架構解析json資料
[toc]
這裡使用一個關聯的spinner來示範何如使用Gson解析json資料
一、配置gson環境
單擊Open Module Settings
單擊Dependencies,點選右邊的綠色加号
選擇選項的第一個Library Dependency
輸入GSON關鍵字,點選搜尋
這裡選擇一個合适的版本,然後點選OK
這時候gson架構就加載好了
二、安裝GSON插件
注意插件安裝完畢後請重新開機Android Studio
三、使用Gson插件生成Java Bean類
在src/main目錄下(與java和res同級的目錄下建立一個assets檔案夾)
在此檔案夾下複制一個地區編号的json檔案
百度雲下載下傳位址:http://pan.baidu.com/s/1hrRAeCO
再建立一個bean包
包下建立一個名為AddrBean的類
在此類檔案的任何位置右鍵
在彈出的對話框中将剛才下載下傳檔案的内容複制到這裡
注意,這裡自動生成的是中文的屬性名,為了友善使用,我們将屬性重命名
然後單擊下一步,一個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中解析資料