SlideShare a Scribd company logo
1 of 31
1
ANDROID NÂNG CAOANDROID NÂNG CAO
Bài 8:
JSON & XML ParsingJSON & XML Parsing
2
Nội dung bài học
● JSON Parsing.
● XML Parsing.
3
Nội dung bài học
● JSON Parsing.
● XML Parsing.
4
JSON Parsing
● Hiện nay rất nhiều Web service cung cấp dữ liệu
dưới định dạng JSON. Do đó chúng ta cần
chuyển chuỗi kí tự dưới định dạng JSON thành
các đối tượng Java để có thể sử dụng trong
chương trình. Quá trình này gọi là JSON
parsing.
● Android cung cấp package org.json trong đó có
2 class chính JSONObject và JSONArray giúp
chúng ta thực hiện JSON parsing dễ dàng.
5
JSON Parsing
● JSONObject:
● JSONObject là class đại điện cho một đối tượng
trong chuỗi JSON.
● Một đối tượng trong chuỗi JSON được bọc trong cặp
dấu ngoặc nhọn “{“,”}”.
● Để tạo ra đối tượng JSONObject chúng ta sử dụng
phương thức khởi tạo và truyền chuỗi JSON biểu
diễn đối tượng đó vào tham số thứ nhất.
● JSONObject cung cấp các phương thức getter để
chúng ta truy xuất đến các thuộc tính của nó:
JSONObject#getXXX(String key)
6
JSON Parsing
● JSONObject:
● Danh sách các phương thức getter thường sử dụng:
– getDouble
– getInt
– getLong
– getString
– get
– getBoolean
– getJSONArray
– getJSONObjects
7
JSON Parsing
● JSONArray:
● Là class đại diện cho array trong chuỗi JSON.
● Array trong chuỗi JSON là một đối tượng được bọc
trong cặp ngoặc vuông “[“, “]”.
● Để tạo ra đối tượng JSONArray chúng ta sử dụng
phương thức khởi tạo và truyền chuỗi JSON biểu
diễn nó vào tham số thứ nhất.
● JSONArray cũng cung cấp các phương thức getter
giống như JSONObject để truy xuất giá trị các thuộc
tính.
8
JSON Parsing
● Ví dụ:
● Chúng ta cần viết chương trình để parse đoạn JSON
sau đây:
[
{
“name”:”Nguyen Van A”,
“old”:”17”
},
{
“name”:”Nguyen Van B”,
“old”:”80”
}
]
9
JSON Parsing
● Các bước để parse như sau:
1.Tạo JSONArray từ chuỗi JSON đã cho.
2. Sử dụng vòng lặp for để xử lý cho các JSONObject
bên trong.
3. Lấy JSONObject từ JSONArray qua các bước lặp.
4.Sử dụng phương thức getter phù hợp để lấy giá trị.
10
JSON Parsing
● Đoạn chương trình mẫu như sau:
import org.json.JSONArray;
import org.json.JSONObject;
・・・
try {
   JSONArray objects = new JSONArray(jsonstring);
for (int i = 0; i < objects.length(); i++) {
JSONObject person = objects.getJSONObject(i);
Log.d(“JSON”,“name:" + person.getString(“name") );
Log.d(“JSON”,“old:" + person.getString(“old") );
Log.d(“JSON”,"======================");
}
} catch (Exception e) {
}
・・・
11
JSON Parsing
● Xem thêm:
● Jackson JSON library: http://jackson.codehaus.org
12
Nội dung bài học
● JSON Parsing.
● XML Parsing.
13
XML Parsing
● Giới thiệu các phương pháp parse XML.
● DOM
● SAX
● XmlPull
14
XML Parsing
● Giới thiệu các phương pháp parse XML.
● DOM
● SAX
● XmlPull
15
XML Parsing
● Giới thiệu các phương pháp parse XML
● DOM (Document Object Model)
– Sử dụng cấu trúc cây, lưu trữ trên bộ nhớ heap.
– Tất cả nội dung của tập tin cần parse được chứa trong bộ
nhớ và sau khi parse xong chúng ta có thể truy xuất đến
bất kỳ một phần tử vào bất cứ lúc nào.
– Do phải lưu nội dung của tập tin XML trên bộ nhớ nên đòi
hỏi bộ nhớ phải lớn đây là một hạn chế trên các thiết bị di
động.
– Do đó phương pháp này chỉ phù hợp cho các trường hợp
tập tin XML cần parse có dung lượng nhỏ.
16
XML Parsing
● Giới thiệu các phương pháp parse XML
● SAX (Simple API for XML)
– SAX dựa trên các sự kiện khi parse.
– Chương trình parse (parser) đọc tập tin XML cần parse từ
đầu tập tin và cứ mỗi lần một sự kiện như mở, đóng một
tag thì callback function trong chương trình được gọi để
thực thi.
– Phía chương trình không điều khiển được việc đọc tập tin
XML như DOM.
– Phương pháp này ít tốn vùng nhớ hơn DOM.
– Trong Android có hai cách sử dụng SAX: cách thông
thường hay cách sử dụng wrapper.
17
XML Parsing
● Giới thiệu các phương pháp parse XML
● XMLPullParser (XPP)
– XPP dựa trên mô hình pull(khi nào cần mới parse, có thể
điều khiển quá trình parse). XPP giống như StAX như
trong Java. Android không hỗ trợ StAX mà hỗ trợ XPP.
– Chương trình parse (parser) đọc tập tin XML cần parse từ
đầu tập tin và quá trình parse có thể điều khiển từ chương
trình.Thông tin có thể lấy từ parser nếu cần..
– Do quá trình parse có thể điều khiển từ phía chương trình
cho nên việc parse có thể dừng lại sớm, tiết kiệm thời
gian.
18
XML Parsing
● Giới thiệu các phương pháp parse XML
DOM SAX XMLPullParser
Cấu trúc parser Cấu trúc cây Dựa vào kiểu sự
kiện (không điều
khiển được)
Dựa vào kiểu sự kiện
(điều khiển được)
Truy xuất phần tử Truy xuất bất kì Truy xuất tuần tự Truy xuất tuần tự
Lấy thông tin phần tử Truy xuất cây DOM Qua hàm callback Truy xuất qua vòng lặp
Ghi vào tập tin Có thể Không thể Có thể
Chi phí bộ nhớ Nhiều Ít nhất Ít
Dễ sử dụng Dễ Khó Dễ
19
XML Parsing
● XML file dùng để demo (sample.xml) có nội
dung:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node>Node Value</node>
</root>
20
XML Parsing
● Giới thiệu các phương pháp parse XML
● DOM
● SAX
● XmlPullParser
21
XML Parsing
● DOM:
● Để parse XML sử dụng DOM, tiến hành các bước
sau:
– Get đối tượng Document từ XML data:
● Tạo đối tượng DocumentBuilderFactory
● Tạo đối tượng DOMParser
● Phân tích XML và xây dựng DOM tree.
– Truy xuất phần tử gốc của cây.
– Truy xuất phần tử bất kỳ trong cây.
– Truy xuất dữ liệu đang lưu trữ trong nút của cây.
22
XML Parsing
● DOM:
InputStream in = null;
try {
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbfactory.newDocumentBuilder();
in = getAssets().open("sample.xml");
Document doc = builder.parse(in);
//Truy xuat phan tu goc <root>
Element root = doc.getDocumentElement();
// Get <node>
NodeList entryList = root.getElementsByTagName("node");
//Lay nut dau tien trong danh sach cac nut <node>
Element nodeElement = (Element) entryList.item(0);
// Gia tri luu tru o <node>
String nodevalue = nodeElement.getFirstChild().getNodeValue();
Log.v(“DOM”, nodevalue);
} catch (Exception e) {
//Xử lý exception
}
23
XML Parsing
● Giới thiệu các phương pháp parse XML
● DOM
● SAX
● XmlPullParser
24
XML Parsing
● SAX
● Các bước thực hiện:
1.Tạo event handler class, lớp này nhận callback từ
SAXParser.
2. Tạo đối tượng SAXParserFactory và tạo đối tượng
SAXParser.
3.Set event handler tạo ở bước 1 cho SAXParser.
4.Tiến hành parse xml bằng cách gọi phương thức
SAXParser#parse
5.Mỗi khi một sự kiện xảy ra nó sẽ gọi callback tương ứng
trong event handler được tạo ra ở bước 1.
25
XML Parsing
● SAX
● Các bước thực hiện:
1.Tạo event handler class, lớp này nhận callback từ
SAXParser:
 Tạo class thừa kế từ class DefaultHandler.
 Hiện thực các callback tương ứng với từng sự kiện:
 Start tag → startElement
 End tag → endElement
 Text trong 1 tag → character
26
XML Parsing
● SAX class SaxHandler extends DefaultHandler {
//Tag starting flag
boolean isNode;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("node".equals(localName)) {
// Start node tag
isNode= true;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("node".equals(localName)) {
// End node tag
isNode= false;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//If node tag is started, output text string to log
if (isNode) {
String nodevalue = new String(ch, start, length);
Log.v(“SAX”, nodevalue);
}
}
}
27
XML Parsing
● SAX
// Create factory of parse
SAXParserFactory saxParaser = SAXParserFactory.newInstance();
Try {
InputStream in = getAssets().open("sample.xml");
/* Get parser */
SAXParser sp = saxParaser.newSAXParser();
/* Create event handler */
SaxHandler sh = new SaxHandler();
/* Pass the input data and event handler to event handler */
sp.parse(in, sh);
} catch (Exception e) {
Log.e(“SAX”,”Error:”,e);
}
28
XML Parsing
● Giới thiệu các phương pháp parse XML.
● DOM
● SAX
● XmlPullParser
29
XML Parsing
● XmlPullParser:
● Các bước để parse xml bằng XmlPullParser:
– Tạo đối tượng XmlPullParser.
– Truyền nội dung của tập tin XML cần parse cho parser.
– Lấy được các sự kiện và phân tích.
30
XML Parsing
● XmlPullParser:
InputStream in = null;
try {
// Get stream of analyzing target
in = getAssets().open("sample.xml");
final XmlPullParser parser = Xml.newPullParser();
parser.setInput(new InputStreamReader(in));
parser.next(); // root tag
parser.next(); // node tag
String tag = parser.getName();
if ("node".equals(tag)) {
parser.next();
String nodevalue = parser.getText();
Log.v(“XMLParser”, nodevalue);
}
} catch (Exception e) {
//Xu ly exception
}
Nguyen Huu Phuoc, MEng.
●  Blog:http://folami.nghelong.com
●  Website http://phuocnh.nghelong.com

More Related Content

What's hot

Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitAndroid Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Phuoc Nguyen
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5
Đặng Til
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
hieusy
 
Meo lap trinh_tech24.vn
Meo lap trinh_tech24.vnMeo lap trinh_tech24.vn
Meo lap trinh_tech24.vn
phiagame
 
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
Dao Uit
 

What's hot (20)

Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitAndroid Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiện
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5
 
Oop unit 02 java cơ bản
Oop unit 02 java cơ bảnOop unit 02 java cơ bản
Oop unit 02 java cơ bản
 
Oop unit 11 input và output
Oop unit 11 input và outputOop unit 11 input và output
Oop unit 11 input và output
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPTBài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
 
Oop unit 10 ngoại lệ
Oop unit 10 ngoại lệOop unit 10 ngoại lệ
Oop unit 10 ngoại lệ
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Bai08 lap trinhtongquat
Bai08 lap trinhtongquatBai08 lap trinhtongquat
Bai08 lap trinhtongquat
 
Bai04 tao vasudungdoituong
Bai04 tao vasudungdoituongBai04 tao vasudungdoituong
Bai04 tao vasudungdoituong
 
Bai05 ket tapvakethua
Bai05 ket tapvakethuaBai05 ket tapvakethua
Bai05 ket tapvakethua
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
 
Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaile
 
Meo lap trinh_tech24.vn
Meo lap trinh_tech24.vnMeo lap trinh_tech24.vn
Meo lap trinh_tech24.vn
 
Tài liệu lập trình PHP từ căn bản đến nâng cao
Tài liệu lập trình PHP từ căn bản đến nâng caoTài liệu lập trình PHP từ căn bản đến nâng cao
Tài liệu lập trình PHP từ căn bản đến nâng cao
 
View sp trigger_udf
View sp trigger_udfView sp trigger_udf
View sp trigger_udf
 
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
 
Bai03 xay dunglop
Bai03 xay dunglopBai03 xay dunglop
Bai03 xay dunglop
 

Viewers also liked

Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development
Phuoc Nguyen
 
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguageAndroid Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Phuoc Nguyen
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Android
hoccungdoanhnghiep
 
56123159 android
56123159 android56123159 android
56123159 android
Hieu Pham
 

Viewers also liked (20)

Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development
 
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
Cách tối ưu hóa môi trường lập trình ứng dụng cho Android - Tăng tốc máy ảo A...
 
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguageAndroid Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
 
Android Nâng cao-Bài 3: Broadcast Receiver
Android Nâng cao-Bài 3: Broadcast ReceiverAndroid Nâng cao-Bài 3: Broadcast Receiver
Android Nâng cao-Bài 3: Broadcast Receiver
 
Android location sensor programming
Android location sensor programmingAndroid location sensor programming
Android location sensor programming
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
Android ios wp7
Android ios wp7Android ios wp7
Android ios wp7
 
IT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKIT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDK
 
Google Android Security (Basic2Advanced)
Google Android Security (Basic2Advanced)Google Android Security (Basic2Advanced)
Google Android Security (Basic2Advanced)
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycle
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycle
 
Slide hội thảo Google Android BKHN 26-10
Slide hội thảo Google Android BKHN 26-10Slide hội thảo Google Android BKHN 26-10
Slide hội thảo Google Android BKHN 26-10
 
Android OS
Android OSAndroid OS
Android OS
 
Lap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hocLap trinh android – kiem tien ngay trong khi hoc
Lap trinh android – kiem tien ngay trong khi hoc
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Android
 
56123159 android
56123159 android56123159 android
56123159 android
 
Lập trình Androi
Lập trình AndroiLập trình Androi
Lập trình Androi
 
Bao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-finalBao cao-lap-trinh-android-final
Bao cao-lap-trinh-android-final
 
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị androidXây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
Xây dựng ứng dụng hỗ trợ học tiếng anh trên thiết bị android
 

Similar to Android Nâng cao-Bài 8-JSON & XML Parsing

Core java 3
Core java 3Core java 3
Core java 3
. .
 

Similar to Android Nâng cao-Bài 8-JSON & XML Parsing (20)

Dsd05 02b-json-rpca
Dsd05 02b-json-rpcaDsd05 02b-json-rpca
Dsd05 02b-json-rpca
 
Hướng dẫn lập trình quản lý c#
Hướng dẫn lập trình quản lý c#Hướng dẫn lập trình quản lý c#
Hướng dẫn lập trình quản lý c#
 
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
 
Dsd05 02a-xml-rpca
Dsd05 02a-xml-rpcaDsd05 02a-xml-rpca
Dsd05 02a-xml-rpca
 
LinQ to XML
LinQ to XMLLinQ to XML
LinQ to XML
 
Coding standard
Coding standardCoding standard
Coding standard
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 
Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớp
 
Asp control
Asp controlAsp control
Asp control
 
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02
 
LINQ
LINQLINQ
LINQ
 
Golang web database3
Golang web database3Golang web database3
Golang web database3
 
Core java 3
Core java 3Core java 3
Core java 3
 
Chuyên đề ngôn ngữ lập trình auto it
Chuyên đề ngôn ngữ lập trình auto itChuyên đề ngôn ngữ lập trình auto it
Chuyên đề ngôn ngữ lập trình auto it
 
Giới thiệu ngắn về DOM
Giới thiệu ngắn về DOMGiới thiệu ngắn về DOM
Giới thiệu ngắn về DOM
 
Sơ lược về StAX
Sơ lược về StAXSơ lược về StAX
Sơ lược về StAX
 
Cac ham va thu tuc trong pascal
Cac ham va thu tuc trong pascalCac ham va thu tuc trong pascal
Cac ham va thu tuc trong pascal
 
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
 
Javascript tong-hop a-z
Javascript tong-hop a-zJavascript tong-hop a-z
Javascript tong-hop a-z
 
Tự học JavaScript
Tự học JavaScriptTự học JavaScript
Tự học JavaScript
 

More from Phuoc Nguyen (7)

Lanh dao va TPP
Lanh dao va TPPLanh dao va TPP
Lanh dao va TPP
 
Hiberbate Framework
Hiberbate FrameworkHiberbate Framework
Hiberbate Framework
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate Framework
 
Webservice performance testing with SoapUI
Webservice performance testing with SoapUIWebservice performance testing with SoapUI
Webservice performance testing with SoapUI
 
Web application security test tools
Web application security test toolsWeb application security test tools
Web application security test tools
 
A successful project sharing
A successful project sharingA successful project sharing
A successful project sharing
 
Buồn vui nghề IT (Pros & cons of IT Career)
Buồn vui nghề IT (Pros & cons of IT Career)Buồn vui nghề IT (Pros & cons of IT Career)
Buồn vui nghề IT (Pros & cons of IT Career)
 

Android Nâng cao-Bài 8-JSON & XML Parsing

  • 1. 1 ANDROID NÂNG CAOANDROID NÂNG CAO Bài 8: JSON & XML ParsingJSON & XML Parsing
  • 2. 2 Nội dung bài học ● JSON Parsing. ● XML Parsing.
  • 3. 3 Nội dung bài học ● JSON Parsing. ● XML Parsing.
  • 4. 4 JSON Parsing ● Hiện nay rất nhiều Web service cung cấp dữ liệu dưới định dạng JSON. Do đó chúng ta cần chuyển chuỗi kí tự dưới định dạng JSON thành các đối tượng Java để có thể sử dụng trong chương trình. Quá trình này gọi là JSON parsing. ● Android cung cấp package org.json trong đó có 2 class chính JSONObject và JSONArray giúp chúng ta thực hiện JSON parsing dễ dàng.
  • 5. 5 JSON Parsing ● JSONObject: ● JSONObject là class đại điện cho một đối tượng trong chuỗi JSON. ● Một đối tượng trong chuỗi JSON được bọc trong cặp dấu ngoặc nhọn “{“,”}”. ● Để tạo ra đối tượng JSONObject chúng ta sử dụng phương thức khởi tạo và truyền chuỗi JSON biểu diễn đối tượng đó vào tham số thứ nhất. ● JSONObject cung cấp các phương thức getter để chúng ta truy xuất đến các thuộc tính của nó: JSONObject#getXXX(String key)
  • 6. 6 JSON Parsing ● JSONObject: ● Danh sách các phương thức getter thường sử dụng: – getDouble – getInt – getLong – getString – get – getBoolean – getJSONArray – getJSONObjects
  • 7. 7 JSON Parsing ● JSONArray: ● Là class đại diện cho array trong chuỗi JSON. ● Array trong chuỗi JSON là một đối tượng được bọc trong cặp ngoặc vuông “[“, “]”. ● Để tạo ra đối tượng JSONArray chúng ta sử dụng phương thức khởi tạo và truyền chuỗi JSON biểu diễn nó vào tham số thứ nhất. ● JSONArray cũng cung cấp các phương thức getter giống như JSONObject để truy xuất giá trị các thuộc tính.
  • 8. 8 JSON Parsing ● Ví dụ: ● Chúng ta cần viết chương trình để parse đoạn JSON sau đây: [ { “name”:”Nguyen Van A”, “old”:”17” }, { “name”:”Nguyen Van B”, “old”:”80” } ]
  • 9. 9 JSON Parsing ● Các bước để parse như sau: 1.Tạo JSONArray từ chuỗi JSON đã cho. 2. Sử dụng vòng lặp for để xử lý cho các JSONObject bên trong. 3. Lấy JSONObject từ JSONArray qua các bước lặp. 4.Sử dụng phương thức getter phù hợp để lấy giá trị.
  • 10. 10 JSON Parsing ● Đoạn chương trình mẫu như sau: import org.json.JSONArray; import org.json.JSONObject; ・・・ try {    JSONArray objects = new JSONArray(jsonstring); for (int i = 0; i < objects.length(); i++) { JSONObject person = objects.getJSONObject(i); Log.d(“JSON”,“name:" + person.getString(“name") ); Log.d(“JSON”,“old:" + person.getString(“old") ); Log.d(“JSON”,"======================"); } } catch (Exception e) { } ・・・
  • 11. 11 JSON Parsing ● Xem thêm: ● Jackson JSON library: http://jackson.codehaus.org
  • 12. 12 Nội dung bài học ● JSON Parsing. ● XML Parsing.
  • 13. 13 XML Parsing ● Giới thiệu các phương pháp parse XML. ● DOM ● SAX ● XmlPull
  • 14. 14 XML Parsing ● Giới thiệu các phương pháp parse XML. ● DOM ● SAX ● XmlPull
  • 15. 15 XML Parsing ● Giới thiệu các phương pháp parse XML ● DOM (Document Object Model) – Sử dụng cấu trúc cây, lưu trữ trên bộ nhớ heap. – Tất cả nội dung của tập tin cần parse được chứa trong bộ nhớ và sau khi parse xong chúng ta có thể truy xuất đến bất kỳ một phần tử vào bất cứ lúc nào. – Do phải lưu nội dung của tập tin XML trên bộ nhớ nên đòi hỏi bộ nhớ phải lớn đây là một hạn chế trên các thiết bị di động. – Do đó phương pháp này chỉ phù hợp cho các trường hợp tập tin XML cần parse có dung lượng nhỏ.
  • 16. 16 XML Parsing ● Giới thiệu các phương pháp parse XML ● SAX (Simple API for XML) – SAX dựa trên các sự kiện khi parse. – Chương trình parse (parser) đọc tập tin XML cần parse từ đầu tập tin và cứ mỗi lần một sự kiện như mở, đóng một tag thì callback function trong chương trình được gọi để thực thi. – Phía chương trình không điều khiển được việc đọc tập tin XML như DOM. – Phương pháp này ít tốn vùng nhớ hơn DOM. – Trong Android có hai cách sử dụng SAX: cách thông thường hay cách sử dụng wrapper.
  • 17. 17 XML Parsing ● Giới thiệu các phương pháp parse XML ● XMLPullParser (XPP) – XPP dựa trên mô hình pull(khi nào cần mới parse, có thể điều khiển quá trình parse). XPP giống như StAX như trong Java. Android không hỗ trợ StAX mà hỗ trợ XPP. – Chương trình parse (parser) đọc tập tin XML cần parse từ đầu tập tin và quá trình parse có thể điều khiển từ chương trình.Thông tin có thể lấy từ parser nếu cần.. – Do quá trình parse có thể điều khiển từ phía chương trình cho nên việc parse có thể dừng lại sớm, tiết kiệm thời gian.
  • 18. 18 XML Parsing ● Giới thiệu các phương pháp parse XML DOM SAX XMLPullParser Cấu trúc parser Cấu trúc cây Dựa vào kiểu sự kiện (không điều khiển được) Dựa vào kiểu sự kiện (điều khiển được) Truy xuất phần tử Truy xuất bất kì Truy xuất tuần tự Truy xuất tuần tự Lấy thông tin phần tử Truy xuất cây DOM Qua hàm callback Truy xuất qua vòng lặp Ghi vào tập tin Có thể Không thể Có thể Chi phí bộ nhớ Nhiều Ít nhất Ít Dễ sử dụng Dễ Khó Dễ
  • 19. 19 XML Parsing ● XML file dùng để demo (sample.xml) có nội dung: <?xml version="1.0" encoding="UTF-8"?> <root> <node>Node Value</node> </root>
  • 20. 20 XML Parsing ● Giới thiệu các phương pháp parse XML ● DOM ● SAX ● XmlPullParser
  • 21. 21 XML Parsing ● DOM: ● Để parse XML sử dụng DOM, tiến hành các bước sau: – Get đối tượng Document từ XML data: ● Tạo đối tượng DocumentBuilderFactory ● Tạo đối tượng DOMParser ● Phân tích XML và xây dựng DOM tree. – Truy xuất phần tử gốc của cây. – Truy xuất phần tử bất kỳ trong cây. – Truy xuất dữ liệu đang lưu trữ trong nút của cây.
  • 22. 22 XML Parsing ● DOM: InputStream in = null; try { DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbfactory.newDocumentBuilder(); in = getAssets().open("sample.xml"); Document doc = builder.parse(in); //Truy xuat phan tu goc <root> Element root = doc.getDocumentElement(); // Get <node> NodeList entryList = root.getElementsByTagName("node"); //Lay nut dau tien trong danh sach cac nut <node> Element nodeElement = (Element) entryList.item(0); // Gia tri luu tru o <node> String nodevalue = nodeElement.getFirstChild().getNodeValue(); Log.v(“DOM”, nodevalue); } catch (Exception e) { //Xử lý exception }
  • 23. 23 XML Parsing ● Giới thiệu các phương pháp parse XML ● DOM ● SAX ● XmlPullParser
  • 24. 24 XML Parsing ● SAX ● Các bước thực hiện: 1.Tạo event handler class, lớp này nhận callback từ SAXParser. 2. Tạo đối tượng SAXParserFactory và tạo đối tượng SAXParser. 3.Set event handler tạo ở bước 1 cho SAXParser. 4.Tiến hành parse xml bằng cách gọi phương thức SAXParser#parse 5.Mỗi khi một sự kiện xảy ra nó sẽ gọi callback tương ứng trong event handler được tạo ra ở bước 1.
  • 25. 25 XML Parsing ● SAX ● Các bước thực hiện: 1.Tạo event handler class, lớp này nhận callback từ SAXParser:  Tạo class thừa kế từ class DefaultHandler.  Hiện thực các callback tương ứng với từng sự kiện:  Start tag → startElement  End tag → endElement  Text trong 1 tag → character
  • 26. 26 XML Parsing ● SAX class SaxHandler extends DefaultHandler { //Tag starting flag boolean isNode; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("node".equals(localName)) { // Start node tag isNode= true; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("node".equals(localName)) { // End node tag isNode= false; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { //If node tag is started, output text string to log if (isNode) { String nodevalue = new String(ch, start, length); Log.v(“SAX”, nodevalue); } } }
  • 27. 27 XML Parsing ● SAX // Create factory of parse SAXParserFactory saxParaser = SAXParserFactory.newInstance(); Try { InputStream in = getAssets().open("sample.xml"); /* Get parser */ SAXParser sp = saxParaser.newSAXParser(); /* Create event handler */ SaxHandler sh = new SaxHandler(); /* Pass the input data and event handler to event handler */ sp.parse(in, sh); } catch (Exception e) { Log.e(“SAX”,”Error:”,e); }
  • 28. 28 XML Parsing ● Giới thiệu các phương pháp parse XML. ● DOM ● SAX ● XmlPullParser
  • 29. 29 XML Parsing ● XmlPullParser: ● Các bước để parse xml bằng XmlPullParser: – Tạo đối tượng XmlPullParser. – Truyền nội dung của tập tin XML cần parse cho parser. – Lấy được các sự kiện và phân tích.
  • 30. 30 XML Parsing ● XmlPullParser: InputStream in = null; try { // Get stream of analyzing target in = getAssets().open("sample.xml"); final XmlPullParser parser = Xml.newPullParser(); parser.setInput(new InputStreamReader(in)); parser.next(); // root tag parser.next(); // node tag String tag = parser.getName(); if ("node".equals(tag)) { parser.next(); String nodevalue = parser.getText(); Log.v(“XMLParser”, nodevalue); } } catch (Exception e) { //Xu ly exception }
  • 31. Nguyen Huu Phuoc, MEng. ●  Blog:http://folami.nghelong.com ●  Website http://phuocnh.nghelong.com