1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu về XML trên Android

12 345 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 236,6 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nn tng Android là mt nn tng phát trin di ng mã ngu n m . Nó giúp b n truy cp vào tt c các khía c nh ca thit b di ng mà nó ch y trên ó, t các  ha cp thp, n phn cng nh là thit b camera trên in tho i. V i rt nhiu th có th s dng Android, có th b n s t hi t i sao b n cn phin n XML. ó không phi vì làm vic v i XML rt thú v ; mà là nó ang làm vic v i nhng th mà nó kích ho t. XML thng c dùng nh là mt  nh d ng d liu trên Internet. Nu b n mu%n truy cp d liu t Internet, các kh nng có th là d liu s d ng XML. Nu b n mu%n gi d liu n mt d ch v Web, có th b n c(ng cn gi c d liu XML. Nói ng)n gn là nu ng dng Android ca b n thúc y Internet, thì có th b n s cn phi làm vic v i XML. Tht may m)n là b n có rt nhiu la chn có s+n  làm vic v i XML trên Android.

Trang 1

Làm vi c v i XML trên Android

M c : Trung bình

Michael Galpin, Ki n trúc s ph n m m, Ludi Labs

08 01 2010

Android là m t h i u hành ngu n m , hi n i và là SDK cho các thi t b di ng V i h i u hành

này, b n có th t o ra các ng d ng di ng r t m nh i u này th m chí còn tr nên h p d n h n n a

khi các ng d ng c a b n có th truy c p các d ch v Web, có ngh a là b n c n s d ng ngôn ng c a

Web là: XML Trong bài vi t này, b n s th y nhi u l a ch n khác nhau làm vi c v i XML trên

Android và cách s d ng chúng xây d ng các ng d ng Android c a chính b n

B t u

Trong bài vi t này, b n h c cách xây d ng các ng d ng Android có th làm vi c v i XML t Internet Các ng d ng Android c vi t b ng ngôn ng l p trình Java™, do v y mà kinh nghi m làm vi c v i công ngh Java là i u c n

ph i có phát tri n cho Android, b n s c n n Android SDK Toàn b mã trình c trình bày trong bài vi t này

s làm vi c v i b t k phiên b n nào c a Android SDK, nh ng phiên b n SDK 1.5_pre ã c s d ng phát tri n

mã trình B n có th phát tri n các ng d ng Android ch! v i SDK và m t trình biên t p v"n b n là , nh ng s d# dàng h n nhi u n u s d ng Android Developer Tools (ADT), là m t trình b$ sung Eclipse %i v i bài vi t này, phiên b n 0.9 c a ADT ã c dùng v i Eclipse 3.4.2, m t phiên b n Java Xem Tài nguyên l y các liên k t d n

n t t c các c ng c này

XML trên Android

N n t ng Android là m t n n t ng phát tri n di ng mã ngu n m Nó giúp b n truy c p vào t t c các khía c nh c a thi t b di ng mà nó ch y trên ó, t các h a c p th p, n ph n c ng nh là thi t b camera trên i n tho i V i

r t nhi u th có th s d ng Android, có th b n s t h&i t i sao b n c n phi n n XML ó không ph i vì làm vi c

v i XML r t thú v ; mà là nó ang làm vi c v i nh ng th mà nó kích ho t XML th 'ng c dùng nh là m t nh

d ng d li u trên Internet N u b n mu%n truy c p d li u t Internet, các kh n"ng có th là d li u s d ng XML

N u b n mu%n g i d li u n m t d ch v Web, có th b n c(ng c n g i c d li u XML Nói ng)n g n là n u ng

d ng Android c a b n thúc *y Internet, thì có th b n s c n ph i làm vi c v i XML Th t may m)n là b n có r t nhi u l a ch n có s+n làm vi c v i XML trên Android

Các trình phân tích XML

M t trong nh n u i m l n nh t c a n n t ng Android chính là vi c nó

thúc *y ngôn ng l p trình Java Android SDK không hoàn toàn cung c p

s+n m i th cho Môi tr 'ng Th'i gian ch y Java (JRE) chu*n c a b n,

nh ng nó l i h, tr m t ph n r t áng k cho nó N n t ng Java ã và ang

h, tr r t nhi u cách khác nhau làm vi c v i XML trong th'i gian nh t

nh, và h u h t các API có liên quan n XML c a Java u c h, tr

y trên Android Ví d , Simple API c a Java cho XML (SAX) và

Document Object Model (DOM) hi n u có s+n trên Android Nhi u n"m

qua, c hai API này là m t ph n c a công ngh Java S n ph*m Streaming

API m i ây cho XML (StAX) hi n ch a có trong Android Tuy nhiên,

Android l i cung c p m t th vi n t ng ng v m-t ch c n"ng i u

Các t vi t t t thông d ng

API: Application programming interface (Giao

di n l p trình ng d ng) RSS: Really Simple Syndication (Giao th c t p

h p thông tin n gi n) SDK: Software Developers Kit (B d ng c cho nhà phát tri n ph m m m)

Trang 2

cu%i cùng là Java XML Binding API c(ng không có s+n trong Android

Ch)c ch)n có th th c hi n API này trong Android Tuy nhiên, nó l i có xu

h ng là m t API n-ng ký, v i r t nhi u th hi n khác nhau thu c các l p

khác nhau th 'ng c n vi c trình bày m t tài li u XML Do v y mà nó không

lý t ng l)m cho m t môi tr 'ng b ràng bu c ch.ng h n nh thi t b c m

tay mà Android c thi t k ch y trên ó Trong các ph n ti p theo, b n

s l y m t ngu n XML n gi n có s+n trên Internet, và xem cách phân tích

ngu n ó nh th nào trong ph m vi m t ng d ng Android s d ng các

API khác nhau c nh)c n trên.Tr c tiên, hãy xem các ph n c n thi t c a ng d ng n gi n s s d ng XML

t Internet

Trình c tin Android

/ng d ng s l y i m tin RSS t trang nhà phát tri n Android ph$ bi n Androidster và phân tách nó thành m t danh sách các %i t ng Java n gi n mà b n có th s d ng quay l i Android ListView (xem T i v l y mã ngu n)

ây là ho t ng a hình thái c$ i n — t c là các th c thi khác nhau (các thu t toán phân tích XML khác nhau) cung

c p ho t ng gi%ng nhau Ví d 1 cho b n th y b n có th mô hình hóa i u này d# dàng nh th nào trong mã trình Java s d ng m t giao di n

Ví d 1 giao di n trình phân tích i m tin XML

Trong Ví d 2, l p Message là m t POJO (Plain Old Java Object) c$ i n miêu t m t c u trúc d li u

Ví d 2 Message POJO

UI: User interface (Giao di n

ng 'i dùng) URL: Universal Resource Locator ( a ch! tài nguyên) XML: Extensible Markup Language (Ngôn ng ánh

d u m r ng)

!

"

#

$ 2'

$

%

.

"

"

"

9+ ,8,

"

.

"

"

:&

Trang 3

Message, trong Ví d 2, th 'ng r t d# làm Nó *n i m t vài tr ng thái bên trong c a mình b ng cách cho phép truy

c p ngày tháng và các liên k t nh các chu,i n gi n, trong khi th hi n chúng nh các %i t ng c s)p x p m t cách rõ ràng (m t java.util.Date và m t java.net.URL) Nó là m t Value Object ( %i t ng Giá tr ) c$ i n, do

v y nó th c thi equals() và hashCode() d a trên tr ng thái bên trong c a nó Nó c(ng th c hi n giao di n

Comparable vì th b n có th s d ng nó s)p x p (theo ngày tháng) Th c t , d li u c phân lo i t i m tin,

do v y mà i u này không c n thi t

M,i th c thi trình phân tích s c n a m t URL n i m tin Androidster và s d ng cái này m m t k t n%i HTTP n trang Androidster Ho t ng ph$ bi n này c mô hình hóa m t cách t nhiên trong mã trình Java s

d ng l p c s tr u t ng nh trong Ví d 3

Ví d 3 L p trình phân tích i m tin c b n

L p c s l u tr feedUrl và s d ng nó m java.io.InputStream N u có b t k sai sót nào, n gi n nó th

m t RuntimeException, sao cho ng d ng d ng ho t ng m t cách nhanh chóng L p c s c(ng xác nh m t vài

h ng s% n gi n cho tên các th0 Ví d 4 trình bày m t s% n i dung m u t i m tin, qua ó b n có th th y c ý ngh a c a các th0 này

Ví d 4 i m tin XML m u

"

:&

"

:&

"

"

"

=

.

"

"

.

"

"

"

+,G 8,

Trang 4

Nh b n có th th y t m u trong Ví d 4, m t ITEM t ng ng v i m t th hi n Message Các nút con c a m c

ch n (TITLE, LINK và v.v ) t ng ng các -c tính c a th hi n Message Vì b n bi t i m tin trông nh th nào

r i và có s+n t t c các ph n ph$ bi n, hãy xem làm th nào phân tách i m tin này s d ng các công ngh khác nhau có s+n trên Android B n s b)t u v i SAX

S d ng SAX

Trong môi tr 'ng Java, b n có th th 'ng xuyên s d ng SAX API khi b n mu%n có m t trình phân tích nhanh và mu%n h n ch t%i a vi c s d ng (footprint) b nh ng d ng c a b n i u ó khi n cho cho nó r t phù h p cho thi t

b di ng ch y Android B n có th s d ng SAX API nh là t môi tr 'ng Java, mà không c n n nh ng thay $i

-c bi t c n thi t ch y trên Android.Ví d 5 trình bày m t th c thi SAX c a giao di n FeedParser

Ví d 5 Th c thi SAX

4

3

% )4 - <L ( G88H 8F0<E0K< 98<88 3 %

3

3

% ) - <I ( G88H 8I0<J0G< 98<88 3 %

3

3 4

3

"

!

.

Trang 5

N u tr c ây b n ã s d ng SAX, thì cái này trông c(ng khá quen thu c Nh v i b t k th c thi SAX nào, ph n l n các chi ti t u n m trong trình x lý SAX Trình x lý nh n các s ki n t trình phân tích SAX khi nó ch y nhanh qua tài li u XML Trong tr 'ng h p này, b n v a t o ra m t l p m i g i là RssHandler và "ng ký nó nh là m t trình x lý cho trình phân tích, nh trong Ví d 6

Ví d 6 Trình x lý SAX

L p RssHandler m r ng l p org.xml.sax.helpers.DefaultHandler L p này cung c p các th c thi m-c

nh, không thao tác cho t t c các ph ng th c t ng t các s ki n c t o ra b i trình phân tích SAX i u này cho phép các l p con ch! ghi chèn lên các ph ng th c khi c n thi t RssHandler có m t API b$ sung,

getMessages Cái này tr v danh sách các %i t ng Message mà trình x lý thu th p c khi nó nh n các s ki n

t trình phân tích SAX Nó có hai bi n trong khác, m t là currentMessage cho th hi n Message ang c phân tích, và m t là bi n StringBuilder g i là builder l u tr d li u ký t t các nút v"n b n Các bi n này u c

"

"

"

! 4

"

:&

"

:&

!

"

4 8!

"

"

:&

"

:&

"

"

"

Trang 6

b)t u khi ph ng th c startDocument c d n ra khi trình phân tích g i s ki n t ng ng cho trình x lý Hãy xem ph ng th c startElement trong Ví d 6 Ph ng th c này c g i m,i khi b)t g-p th0 m trong tài li u XML B n ch! c n quan tâm khi nào th0 ó là th0 ITEM Trong tr 'ng h p ó, b n t o ra m t Message m i Bây gi' hãy nhìn vào ph ng th c characters Ph ng th c này c g i ra khi b)t g-p d li u ký t t các nút v"n b n D

li u d# dàng c thêm vào bi n builder Cu%i cùng hãy xem ph ng th c endElement Ph ng th c này c g i

ra khi b)t g-p th0 k t thúc %i v i các th0 t ng ng v i các -c tính c a m t Message, gi%ng nh TITLE và LINK,

-c tính thích h p c thi t -t trên currentMessage s d ng d li u t bi n builder N u th0 k t thúc là m t ITEM, thì currentMessage thêm vào danh sách Messages ây là s phân tích SAX r t i n hình; ây không có gì

là duy nh t %i v i Android Vì th n u b n bi t cách vi t m t trình phân tích SAX Java, thì b n bi t cách vi t m t trình phân tích SAX Android Tuy nhiên, Android SDK có b$ sung thêm m t s% tính n"ng thu n ti n vào SAX

Phân tích SAX d dàng h n

Android SDK có ch a m t l p ti n ích c g i là android.util.Xml Ví d 7 trình bày cách cài -t m t trình phân tích SAX v i cùng l p ti n ích nh th

Ví d 7 Trình phân tích SAX Android

L u ý là l p này v n s d ng trình x lý SAX chu*n, vì n gi n b n ã s d ng l i RssHandler nh trong Ví d 7 trên Vi c có th s d ng l i trình x lý SAX r t t%t, nh ng nó v n có ôi chút ph c t p v mã trình B n có t ng

t ng, n u b n ph i phân tích m t tài li u XML ph c t p h n r t nhi u, trình phân tích có th tr thành m nh t màu m1 cho các l,i Ví d , hãy xem l i ph ng th c endElement trong Ví d 6 L u ý cách ph ng th c này ki m tra

nh th nào n u currentMessage có giá tr không tr c khi nó c% cài -t các thu c tính? Bây gi' hãy nhìn vào XML

m u trong Ví d 4 L u ý r ng có các th0 TITLE và LINK n m ngoài các th0 ITEM ó là lý do t i sao ki m tra giá tr không c a vào N u không thì th0 TITLE u tiên có th gây ra m t NullPointerException Android bao

g m c bi n th SAX API c a chính nó (xem Ví d 8) lo i b& yêu c u b n ph i vi t trình x lý SAX c a chính b n

Ví d 8 Trình phân tích SAX Android n gi n

"

!

.

"

"

"

"

!

!

!!

"

"!

Trang 7

Nh ã h a, mã phân tích SAX m i không s d ng trình x lý SAX Thay vào ó nó s d ng các l p t gói

android.sax trong SDK Các l p này cho phép b n mô hình hóa c u trúc c a tài li u XML c a b n và thêm m t trình nghe s ki n n u c n Trong mã trình trên, b n khai báo r ng tài li u c a b n s có m t ph n t g%c có tên rss và r ng

ph n t này s có ba ph n t con là channel Ti p n b n nói r ng channel s có ba ph n t con c g i là ITEM

và b n b)t u g)n các trình nghe %i v i m,i trình nghe, b n ã s d ng m t l p bên trong vô danh ã th c hi n giao

di n b n quan tâm (ho-c EndElementListner ho-c EndTextElementListener) Chú ý không c n ph i theo dõi

d li u ký t Vi c này không ch! n gi n h n mà th c s còn hi u qu h n Cu%i cùng, khi b n g i d n ph ng th c

ti n ích Xml.parse, bây gi' b n a vào trình x lý c t o ra t ph n t g%c

Toàn b mã trình trên trong Ví d 8 thu c lo i tùy ch n N u b n th y tho i mái v i mã trình phân tích SAX chu*n trong môi tr 'ng Java, thì b n có th tích vào ó N u b n mu%n th các trình bao b c ti n l i do Android SDK cung

c p, b n c(ng có th s d ng nó N u b n không mu%n s d ng SAX thì sao ây? V n còn có m t vài l a chon khác

L a ch n u tiên b n s th y ó là DOM

Làm vi c DOM

DOM phân tích trên Android c h, tr hoàn toàn Nó làm vi c chính xác nh khi nó làm vi c trong mã trình Java

mà b n s ch y trên máy tính bàn ho-c trên m t máy ch Ví d 9 trình bày m t th c thi d a trên DOM c a giao

di n trình phân tích

Ví d 9 Th c thi d a trên DOM c a m t trình phân tích i m tin

"

"!

.!

"

"!

"

"!

"

"!

.

"

"

"

"

!

.

Trang 8

Gi%ng nh ví d SAX u tiên, không có gì là c th %i v i Android v mã trình này Trình phân tích DOM c t t c các tài li u XML vào b nh r i sau ó cho phép b n s d ng các DOM API ch y ngang qua cây XML, truy v n d

li u mà b n mu%n ây là mã trình r t d# làm, và, trong m t s% cách, còn n gi n h n c các th c thi d a trên SAX Tuy nhiên, thông th 'ng DOM tiêu t%n nhi u b nh h n vì tr c tiên m i th u c c vào b nh i u này có

th là m t v n trên thi t b di ng ch y Android, nh ng nó có th áp ng c trong m t vài tr 'ng h p s d ng

nh t nh mà dung l ng tài li u XML s không bao gi' quá l n Có th i u này ng ý r ng các nhà phát tri n

Android ã oán r ng trình phân tích SAX s ph$ bi n h n r t nhi u trên các ng d ng Android, do ó các ti n ích b$ sung c cung c p cho nó M t lo i trình phân tích XML khác c(ng có trên Android, và ó là trình phân tích kéo

Trình phân tích kéo XML

Nh ã c p trong các ph n tr c, Android không cung c p h, tr cho StAX API c a Java Tuy nhiên Android l i i kèm v i m t trình phân tích kéo làm vi c t ng t nh StAX Nó cho phép mã ng d ng c a b n kéo ho-c tìm ki m các s ki n t trình phân tích, trái ng c v i trình phân tích SAX t ng *y các s ki n cho trình x lý Ví d 10 miêu t m t th c thi trình phân tích kéo c a m t giao di n trình phân tích i m tin

Ví d 10 Th c thi d a trên trình phân tích kéo

"

"

"

!

"

"

"

"

"

! +

.

+ +

Trang 9

Trình phân tích kéo làm vi c t ng t nh trình phân tích SAX Nó có các s ki n t ng t (ph n t b)t u, ph n t

k t thúc) nh ng b n ph i kéo t chúng (parser.next()) Các s ki n c g i i d i d ng các mã s%, vì th b n

có th s d ng m t case-switch n gi n Chú ý, thay vì nghe cho n khi k t thúc các ph n t nh trong phân tích SAX, v i trình phân tích kéo, th t d# dàng ti n hành h u h t các x lý ngay t u Trong mã trình trong Ví d 10, khi

m t ph n t b)t u, b n có th g i d n parser.nextText() kéo t t c d li u ký t t tài li u XML i u này mang n m t s n gi n hóa t%t cho phân tích SAX C(ng c n chú ý r ng b n -t m t c' (bi n boolean done)

nh n bi t khi nào b n n ph n k t thúc n i dung mà b n quan tâm i u này cho phép b n s m t m d ng vi c c tài

li u XML, vì b n bi t r ng mã trình s không quan tâm n ph n còn l i c a tài li u i u này có th r t h u ích, -c

bi t n u b n ch! c n m t ph n nh& tài li u ang c truy c p B n có th gi m áng k th'i gian phân tích b ng cách

d ng vi c phân tích càng s m càng t%t H n n a, ki u t%i u hóa này -c bi t quan tr ng trên thi t b di ng n i t%c

k t n%i có th ch m Trình phân tích kéo có m t vài u i m v hi u n"ng c(ng nh u i m s d ng d# dàng C(ng có th s d ng nó vi t XML

T o XML

n t n bây gi', tôi v n ã và ang t p trung phân tích XML t Internet Tuy nhiên, th!nh tho ng ng d ng c a b n

c n g i XML t i m t máy ch xa Hi n nhiên b n có th s d ng m t StringBuilder ho-c cái gì ó t ng t

t o ra m t chu,i XML M t thay th khác n a b)t ngu n t trình phân tích kéo trong Ví d 11

Ví d 11 Vi t XML b ng trình phân tích kéo

5 ) 5 !!

"

"

!

+

"

"

"

"

"

"

.

Trang 10

L p XmlSerializer là m t ph n trong gói gi%ng nh XmlPullParser c dùng trong ph n tr c Thay vì kéo vào các s ki n, nó *y chúng ra n m t lu ng ho-c m t b ghi Trong tr 'ng h p này, nó d# dàng *y chúng sang

m t th hi n java.io.StringWriter Nó cung c p m t API n gi n cùng v i các ph ng th c b)t u và k t thúc m t tài li u, x lý các ph n t và thêm v"n b n ho-c các thu c tính ây có th là m t l a ch n thay th khá t%t cho vi c s d ng m t StringBuilder, vì d# dàng m b o XML c a b n chu*n xác

T ng k t

Lo i ng d ng nào b n mu%n xây d ng cho các thi t b Android? Dù là lo i nào i n a, n u nó c n làm vi c v i d

li u t Internet, thì có th nó c n ph i làm vi c v i XML Trong bài vi t này, b n ã th y r ng Android c tích h p

i cùng v i r t nhi u công c x lý XML B n có th ch n l y m t trong các công c ó nh là công-c -l a-ch n c a

b n, ho-c b n có th l a ch n c"n c vào tr 'ng h p s d ng Thông th 'ng s l a ch n an toàn là ch n cùng v i SAX, và Android cung c p cho b n c cách truy n th%ng th c hi n SAX và m t trình bao b c ti n l i khéo léo trên

c SAX N u tài li u c a b n nh&, thì có l DOM là cách n gi n h n nên theo N u tài li u c a b n l n, nh ng b n ch! c n m t ph n tài li u, thì trình phân tích kéo XML có l là cách hi u qu h n nên theo Cu%i cùng, vi t XML, gói trình phân tích kéo c(ng cung c p m t cách thu n ti n làm vi c ó Vì th , cái mà XML c a b n c n có là gì i

n a, thì Android SDK v n có cho b n

T i v

Tài nguyên

H c t p

Develop Android applications with Eclipse (Frank Ableson,developerWorks, 02/2008): Cách d# dàng nh t phát tri n các ng d ng Android là s d ng Eclipse Hãy tìm hi u t t c i u này trong bài h ng d n này Using integrated packages: Codehaus' Woodstox (Michael Galpin, developerWorks, 07/2007): Dành cho so sánh khác c a SAX, DOM, và trình phân tích kéo, hãy c bài vi t này

StAX'ing up XML, Part 2: Pull parsing and events (Peter Nehrer, developerWorks, December 2006): Cái nhìn sâu h n v trình phân tích kéo XML

Understanding SAX (Nicholas Chase, developerWorks, 07/2003): Tr thành chuyên gia v phân tích SAX v i bài h ng d n này

"

"

"

Thông tin v ph ng th c t i

Ngày đăng: 04/04/2016, 22:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w