各位Android安卓開發者大家好 ^^
今天小黑人要與大家分享的文章主題是"Gson",大家可能會有一個疑問就是Gson是什麼東西,簡單來說Gson就是Google開發用來解析JSON格式資料的應用工具,主要負責將JSON字串與JAVA物件做兩者之間的轉換,那名稱為什麼會叫做Gson呢,其實是當初Google因公司內部需求而自行研發出的解析工具,在2008年5月公開發佈第一版提供給大家做使用,直到至今Gson這套工具還是擁有許多開發者在使用,那我們要怎麼運用Gson來解析JSON格式資料呢?如果藉由Gson來解析是非常方便快速的,就讓我們繼續看下去吧~
1. 首先,我們要先下載Gson解析應用的Library,這是Google所提供的開放程式庫,下載網址為 : https://code.google.com/p/google-gson/,大家可以先把Gson的jar檔下載並放置專案Libs資料夾內,Gson的Library放入專案內後就可以開始使用Gson類別來進行解析囉。
2. 運用Gson類別不需要變更到AndroidManifest.xml與Layout(.xml),所以我們直接在Activity(.java)上運用Gson類別的解析功能,接下來就是JSON的文字內容,要取得JSON訊息正常的步驟是串接API後所回傳的文字內容,但小黑人這次範例就先省略API串接這一部分暫時用假資料來取代,如果大家有想知道如何串接API訊息的話,可以參考小黑人相關文章(API網路串接傳輸: http://dean-android.blogspot.tw/2014/03/androidserver-apihttpgethttppost.html)。好,小黑人這次假設用個簡單的會員資料的型態格式來做範例,會員資料的格式其實就是人的資訊意思,所以小黑人範例假設的JSON格式內容就包含id、姓名、手機、地址、身高、體重、興趣,然後興趣欄位是個陣列型態,代表著可以擁有多種興趣的意思,這些資料型態只是小黑人簡單舉例的欄位,實際上大家要依專案需求制訂欄位喔,預設的JSON文字格式如下 :
/**
*
{"id":17,
"name":"小黑人",
"phone":"09xx-xxx-xxx",
"address":"小黑人的Android教室",
"height":178.6,
"weight":60.3,
"interests":[{"type":"室內活動","item":"看電影"},{"type":"戶外活動","item":"打籃球"},{"type":"戶外活動","item":"登山"}]}
*
*/
3. 知道API回傳的JSON格式內容後,我們就可以針對JSON的架構建立JAVA物件,如上方的JSON結構可以用一個JAVA物件類別(姓名、電話...)完成,但是比較特別的地方是興趣這裡是屬於陣列型態,裡面又包含類型和內容,所以興趣這部分我們再建立一個屬於興趣的類別帶入,小黑人針對這兩個物件類別建立的程式碼如下 :
a. People人員資訊類別 :
public class People
{
//ID
private int id;
//姓名
private String name;
//電話
private String phone;
//地址
private String address;
//身高
private double height;
//體重
private double weight;
//興趣
private Interest[] interests;
//P.S. 以上變數名稱與串接欄位必需相符
public People()
{
}
public void setID(int id)
{
this.id = id;
}
public int getID()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setPhone(String phone)
{
this.phone = phone;
}
public String getPhone()
{
return phone;
}
public void setAddress(String
address)
{
this.address = address;
}
public String getAddress()
{
return address;
}
public void setHeight(double
height)
{
this.height = height;
}
public double getHeight()
{
return height;
}
public void setWeight(double
weight)
{
this.weight = weight;
}
public double getWeight()
{
return weight;
}
public void
setInterests(Interest[] interests)
{
this.interests =
interests;
}
public Interest[] getInterests()
{
return interests;
}
}
b. Interest興趣類別 :
public class Interest
{
//類型
private String type;
//項目
private String item;
//P.S. 以上變數名稱與串接欄位必需相符
public Interest()
{
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setItem(String item)
{
this.item = item;
}
public String getItem()
{
return item;
}
}
4. 最後的步驟就是運用Gson類別把JSON內容裝入到我們建立好的物件裡,只要簡短的幾行程式碼就可以完成囉,程式碼如下:
public class MainActivity extends Activity
{
private final String TAG = "小黑人的Android教室";
@Override
protected void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//假設API回傳的JSON資料
String JsonString =
"{\"id\":17,\"name\":\"小黑人\",\"phone\":\"09xx-xxx-xxx\",\"address\":\"小黑人的Android教室\",\"height\":178.6,\"weight\":60.3,\"interests\":[{\"type\":\"室內活動\",\"item\":\"看電影\"},{\"type\":\"戶外活動\",\"item\":\"打籃球\"},{\"type\":\"戶外活動\",\"item\":\"登山\"}]}";
//建立Gson類別並將JSON資訊裝入People物件裡
Gson gson = new Gson();
People mPeople =
gson.fromJson(JsonString, People.class);
//P.S.以上兩行就已經將資訊裝入People物件裡了,完成。
//如果想要查看People物件內容,下方用Log印出資訊。
Log.d(TAG, "id :
" + mPeople.getID());
Log.d(TAG, "name :
" + mPeople.getName());
Log.d(TAG, "phone :
" + mPeople.getPhone());
Log.d(TAG, "address :
" + mPeople.getAddress());
Log.d(TAG, "height :
" + mPeople.getHeight());
Log.d(TAG, "weight :
" + mPeople.getWeight());
for(int i = 0 ; i <
mPeople.getInterests().length ; i++)
{
Log.d(TAG,
"Type : " + mPeople.getInterests()[i].getType());
Log.d(TAG,
"Item : " + mPeople.getInterests()[i].getItem());
}
}
}
以上就是運用Gson類別將JSON格式文字裝入JAVA物件裡,非常的方便好用,簡短的程式碼就可以完成許多步驟,大家可以試試看運用Gson來解析JSON格式文字喔!
謝謝大家,如有任何問題都可以和小黑人一起交流討論!
☆小黑人☆
我有寄信給您喔!
回覆刪除希望可以一同討論相關問題
您好,很抱歉這麼久才回覆您,
刪除根據您的問題小黑人與您解釋,
可以請問發生錯誤的動作是在擷取的部分還是儲存的部分呢?
如果要做儲存的動作需要在AndroidManifest.xml加入權限,
您可以再試試看,如果還是發生錯誤的話,可以查看LogCat的錯誤原因。
感謝您的留言!
您好,很抱歉這麼久才回覆您,
刪除根據您的問題小黑人與您解釋,
可以請問發生錯誤的動作是在擷取的部分還是儲存的部分呢?
如果要做儲存的動作需要在AndroidManifest.xml加入權限,
< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" / >
您可以再試試看,如果還是發生錯誤的話,可以查看LogCat的錯誤原因。
感謝您的留言!
您好,謝謝您的肯定。
回覆刪除感謝您的留言與支持!
老師...我天天用Gmail,但是沒有天天看您的網站啊= =
回覆刪除上面那個權限我有加入喔,我覺得問題出在我的繪圖程式,我將螢幕變為畫布,但是那個畫布上卻無法使用任何元件,所以當我將imageview放在畫布上,然後想要使用imageview時就會出錯。
至於log cat ...我還不會看= =,我研究一下
無法使用imageview的我,無法將螢幕截圖到imageview,然後儲存,所以問題出在擷取
刪除請問若是JSON解出來有http圖的網址,該如何使用 imageview 讀出圖,謝謝。
回覆刪除難得一見的 Android 教學網站,版主不更新了嗎...
回覆刪除謝謝 收穫良多
回覆刪除Amazing post I Read your blog, it`s so informative great work thanks for sharing
回覆刪除any one can explore INDIA visit us we are PACIFIC TOUR INDIA join us
Some Packages:-
Golden Triangle Tour 5 Days
Golden Triangle Tour 6 Days
Golden Triangle Tour 4 Days
Golden Triangle & Varanasi
Golden Triangle & Ranthambore
for more information contact us
CONTACT INFO
Shop No.16, First Floor, Prerna Plaza, Fatehabad Road, Agra- 282001
Mob : +91 - 9759747417, 9568617417
Email: info@pacifictourindia.com,
Web-side: www.pacifictourindia.com