際際滷

際際滷Share a Scribd company logo
TRUNG TM TIN HOC  畉I H畛C KHOA H畛C T畛 NHIN  畉I H畛C QU畛C GIA TP. H畛 CH
                                  MINH

                     B畛 Ph畉n L畉p Tr狸nh Di 畛ng  L畉p Tr狸nh Android




      B叩o C叩o T畛t Nghi畛p Kh坦a L畉p Tr狸nh Android C董 B畉n
   畛 Ti:




                                                     H畛c Vi棚n:Nguy畛n Xu但n D動董ng
                                                              Hu畛nh 畛c Vinh

                                                     L畛p:Android t畛i 2,4,6

                                                            Gi叩o Vi棚n:B湛i Qu畛c nh
N畛i Dung:
I.Gi畛i thi畛u
1.畛 ti
       Ch動董ng tr狸nh s畛 d畛ng webservice l畉y th担ng tin v畛 t畉t c畉 th担ng tin 畛ng 畉t
tr棚n th畉 gi畛i v show l棚n giao di畛n.

2.Ph但n t鱈ch v m担 t畉 畛 ti
       畛 ti s畉 th畛c hi畛n nh畛ng y棚u c畉u sau:
a.X畛 l箪:
       _G畛i requests l棚n service 畛 l畉y th担ng tin v畛 畛ng 畉t t畛 server v畛.
       _X畛 l箪 th担ng tin l畉y v畛 (c畉t nh畛ng th担ng tin c畉n l畉y bao g畛m ngy, n董i,
matitude ,latitude v longtitude) r畛i l動u vo contentprovider.
       _C叩c thao t叩c l畉y data v l動u data 畛 tr棚n s畉 動畛c th畛c hi畛n th担ng qua 1
service ch畉y ng畉m.
       _Listview (main Activity)s畉 d湛ng 畛 hi畛n th畛 th担ng tin 畛ng 畉t l棚n mn
h狸nh .Listview s畉 l畉y d畛 li畛u t畛 content provider.
b.Ch畛c nng:
       _Khi click vo 1 row tr棚n listview s畉 hi畛n th畛 th担ng tin chi ti畉t c畛a tr畉n 畛ng
畉t th担ng qua 畛i t動畛ng dialog.
       _Khi click menu (option menu) s畉 c坦 2 ch畛c nng l refresh v references
.Refresh dung 畛 load l畉i d畛 li畛u t畛 data l棚n listview .Ch畛c nng reference dung 畛
ch畛n ch畉 畛 update t畛 畛ng hay kh担ng v th畛i gian update t畛 畛ng l bao l但u 畛ng
th畛i h畛 tr畛 th棚m 1 filter 畛 l畛c ra nh畛ng tr畉n 畛ng 畉t l畛n h董n gi叩 tr畛 動a vo.


II.Thu畉t to叩n
1.L畉y d畛 li畛u t畛 server (d動畛i d畉ng XML):


public void doRefreshEarthquakes()

{
      try{
URL url = new URL(
            "http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml");
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document doc = db.parse(new InputSource(url.openStream()));
      doc.getDocumentElement().normalize();

      NodeList nodeList = doc.getElementsByTagName("entry");
                  //Log.i("test",);
            /** Assign textview array lenght by arraylist size */

      for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);

            Element fstElmnt = (Element) node;
            NodeList idList = fstElmnt.getElementsByTagName("georss:point");
            Element idElement = (Element) idList.item(0);
            idList = idElement.getChildNodes();

            String point=((Node)idList.item(0)).getNodeValue();
            String[] location = point.split(" ");
            Location l = new Location("dummyGPS");
            l.setLatitude(Double.parseDouble(location[0]));
            l.setLongitude(Double.parseDouble(location[1]));


            NodeList titleList = fstElmnt.getElementsByTagName("title");
            Element titleElement = (Element) titleList.item(0);
            titleList = titleElement.getChildNodes();

            String details=((Node) titleList.item(0)).getNodeValue();
            String magnitudeString = details.split(" ")[1];
            int end = magnitudeString.length()-1;
            double magnitude =
Double.parseDouble(magnitudeString.substring(0, end));
            details = details.split(",")[1].trim();


            NodeList dateList = fstElmnt.getElementsByTagName("updated");
                        Element dateElement = (Element) dateList.item(0);
            dateList = dateElement.getChildNodes();

            String dd=((Node)dateList.item(0)).getNodeValue();

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-
dd'T'hh:mm:ss'Z'");
            Date qdate = new GregorianCalendar(0,0,0).getTime();
            try {
                  qdate = sdf.parse(dd);
            } catch (ParseException e) {
                       e.printStackTrace();
            }

            NodeList linkList = fstElmnt.getElementsByTagName("link");
            Element linkElement = (Element) linkList.item(0);
            linkList = linkElement.getChildNodes();
String link1=linkElement.getAttribute("href");

           Quake quake=new Quake(qdate, details, l,magnitude, link1);
                       //lay 1 doi tuong moi ve
           addNewQuake(quake);

           }
           } catch (Exception e) {
           System.out.println("XML Pasing Excpetion = " + e);
           Log.i("test", "null pointer");
           }

      }




II.Th畛c hi畛n
1.Code ch動董ng tr狸nh
a.S董 畛 t畛ng qu叩t




                             Option Menu            References
       ListView

    (Main Activity)                              (atoupdate v filter
                                                   theo matitude)



loadQuakesFromProvider()                       l畛c th担ng qua reference
                             b畉n l棚n Intent


    Contentprovider                                   Service
                             l動u data
Send                 get


             Qake

                                                             Internet




b.Code
      畛 但y s畉 tr狸nh by theo t畛ng l畛p v sau 坦 l m畛i li棚n k畉t gi畛a ch炭ng.
b.1C叩c l畛p
      _Quake class: l 1 畛i t動畛ng l動u c叩c th担ng tin c畛a 1 畛i t動畛ng Quake bao
g畛m: date(ki畛u date time),longtitude(long),latitude(long),matitude(long),
area(String).




        private   Date date;
        private   String details;
        private   Location location;
        private   double magnitude;
        private   String link;




      _EarthQuake2011V1Activity class: l m畛t main Activity d湛ng 畛 hi畛n th畛
th担ng tin c畛a Quakes l棚n mn h狸nh.

EarthQuake2011V1Activity
_updateData()
    +Start service
_updateFromReference()
    +L畉y c叩c th担ng s畛 l動u vo references trong l畛p Reference 畛 filter ,x畛 l箪.
_addQuakeToArray()
     +add 1 畛i t動畛ng quake vo earthquakes array.
 _loadQuakeFromProvider()
     +L畉y d畛 li畛u t畛 provider l棚n theo t畛ng row r畛i 畛 vo 畛i t動畛ng quake(1 row
trong provider s畉 動畛c l動u vo 1 quake )ti畉p 坦 l add quake vo quakes array
(th担ng qua hm addQuakeToArray())
_EarthQuakeBroadCastReceiver class:l畛p ny ny k畉 th畛a t畛 BroadcastReceiver
d湛ng 畛 b畉t l畉y intent b畉n l棚n t畛 sevice khi c坦 1 quakes m畛i 動畛c update.


Ngoi c叩c ph動董ng th畛c tr棚n th狸 l畛p ny c嘆n override l畉i 1 s畛 ph動董ng th畛c c畛a
Activity 畛 t畉o option menu,v dialog.
       _EarthQuakeProvider class:l畛p ny k畉 th畛a t畛 Contentprovider class d湛ng
畛 t畉o database v cung c畉p 1 s畛 ph動董ng th畛c 畛 thao t叩c d畛 li畛u.


// Column Names
  public static   final   String   KEY_ID = "_id";
  public static   final   String   KEY_DATE = "date";
  public static   final   String   KEY_DETAILS = "details";
  public static   final   String   KEY_LOCATION_LAT = "latitude";
  public static   final   String   KEY_LOCATION_LNG = "longitude";
  public static   final   String   KEY_MAGNITUDE = "magnitude";
  public static   final   String   KEY_LINK = "link";

private static final String DATABASE_CREATE =
      "create table " + EARTHQUAKE_TABLE + " ("
      + KEY_ID + " integer primary key autoincrement, "
      + KEY_DATE + " LONG, "
      + KEY_DETAILS + " TEXT, "
      + KEY_LOCATION_LAT + " FLOAT, "
      + KEY_LOCATION_LNG + " FLOAT, "
      + KEY_MAGNITUDE + " FLOAT, "
      + KEY_LINK + " TEXT);";


@Override
  public Cursor query(Uri uri, String[] projection, String selection, String[]
selectionArgs, String sort) {

}

@Override
  public Uri insert(Uri _uri, ContentValues _initialValues) {

}

@Override
public int delete(Uri uri, String where, String[] whereArgs) {

}

@Override
  public int update(Uri uri, ContentValues values, String where, String[]
whereArgs) {

}




        EarthQuakeService class:k畉 th畛a t畛 l畛p Sevice ch畉y ng畉m g畛i request v
        _
l畉y data t畛 server.Sau 坦 l動u d畛 li畛u xu畛ng provider.


EarthQuakeService
_refreshEarthquakes()
    +Start 1 new thread th畛c thi hm bachgroundRefresh().
_backgroundRefresh() l 1 Runable
     +Override hm void run() v th畛c thi ph動董ng th畛c doFreshEarthQuakes().
_TimerTask doRefresh()
     +Th畛c thi ph動董ng th畛c refreshEarthquakes() trong hm run .
_onStart()
     + C叩c hm tr棚n s畉 動畛c s畛 d畛ng khi ta ch畛n ch畉 畛 auto update trong
References.N畉u kh担ng update t畛 畛ng th狸 s畉 g畛i hm doRefreshEarthQuake()
_doRefreshEarthQuake():
    +S畉 th畛c hi畛n k畉t n畛i v畛i server 畛 l畉y d畛 li畛u v畛 sau khi l畉y v畛 s畉 畛 d畛 li畛u
vo 畛i t動畛ng Quake r畛i add vo provider.
_addNewQuake()
     +Hm ny d湛ng 畛 add d畛 li畛u vo provider
_announceNewQuake()
     +Hm ny s畉 動畛c b畉n l棚n n畉u c坦 1 quake m畛i 動畛c l動u vo provider
     +Trong hm ny ta th畛c thi 1 status notification 畛 khi c坦 1 quake m畛i 動畛c
c畉p nh畉t th狸 status ny s畉 b畉n l棚n th担ng b叩o cho ng動畛i d湛ng bi畉t.




2.Giao di畛n
a.Mn h狸nh ch鱈nh: s畉 hi畛n th畛 danh s叩ch c叩c earthquakes
Android report
Android report
b.EarthQuake details:khi click vo 1 row tr棚n listview s畉 hi畛n th畛 dialog 畛 show
details
c.Option Menu: g畛m 2 ch畛c nng l refresh v reference.Refresh s畉 load l畉i data t畛
provider.C嘆n Reference th狸 s畉 set c叩c ch畉t 畛 auto update v filter theo matitude.
Android report
*Reference
Android report
*Mn h狸nh sau khi filter v畛i matitude b畉ng 5:

More Related Content

Viewers also liked (17)

Productivity Is Killing Us SDEC14
Productivity Is Killing Us SDEC14Productivity Is Killing Us SDEC14
Productivity Is Killing Us SDEC14
Adam Yuret
Ng但n hng vs r炭t ti畛n hng lo畉t
Ng但n hng vs r炭t ti畛n hng lo畉tNg但n hng vs r炭t ti畛n hng lo畉t
Ng但n hng vs r炭t ti畛n hng lo畉t
ecoblader
Busyness geekfest
Busyness geekfestBusyness geekfest
Busyness geekfest
Adam Yuret
Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...
Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...
Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...
Peter Goodburn
Presentation1.html
Presentation1.htmlPresentation1.html
Presentation1.html
Amurusha Kennedy
Gavin
GavinGavin
Gavin
benock
Ensayo bien bEnsayo bien b
Ensayo bien b
Miri A. AlvareZz
problemas con las ticsproblemas con las tics
problemas con las tics
Miri A. AlvareZz
Value Stream Mapping LASCOT 2014
Value Stream Mapping LASCOT 2014Value Stream Mapping LASCOT 2014
Value Stream Mapping LASCOT 2014
Adam Yuret
Busyness lascot15
Busyness lascot15Busyness lascot15
Busyness lascot15
Adam Yuret
A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015
A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015 A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015
A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015
Adam Yuret
Busyness Agile Roots 2015
Busyness Agile Roots 2015Busyness Agile Roots 2015
Busyness Agile Roots 2015
Adam Yuret
The Art of Program Development
The Art of Program DevelopmentThe Art of Program Development
The Art of Program Development
mikespezzano
It report
It reportIt report
It report
tersurmd
Agile leadership (SeaSpin 05/2015)
Agile leadership (SeaSpin 05/2015)Agile leadership (SeaSpin 05/2015)
Agile leadership (SeaSpin 05/2015)
Adam Yuret
"Productivity" is Killing Us.
"Productivity" is Killing Us. "Productivity" is Killing Us.
"Productivity" is Killing Us.
Adam Yuret
Showmybuy kista 2013
Showmybuy kista 2013Showmybuy kista 2013
Showmybuy kista 2013
niclaslindberg
Productivity Is Killing Us SDEC14
Productivity Is Killing Us SDEC14Productivity Is Killing Us SDEC14
Productivity Is Killing Us SDEC14
Adam Yuret
Ng但n hng vs r炭t ti畛n hng lo畉t
Ng但n hng vs r炭t ti畛n hng lo畉tNg但n hng vs r炭t ti畛n hng lo畉t
Ng但n hng vs r炭t ti畛n hng lo畉t
ecoblader
Busyness geekfest
Busyness geekfestBusyness geekfest
Busyness geekfest
Adam Yuret
Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...
Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...
Track Record - Stock Indices | Forex | Fixed Income & Commoditied - WaveTrack...
Peter Goodburn
Gavin
GavinGavin
Gavin
benock
Ensayo bien bEnsayo bien b
Ensayo bien b
Miri A. AlvareZz
problemas con las ticsproblemas con las tics
problemas con las tics
Miri A. AlvareZz
Value Stream Mapping LASCOT 2014
Value Stream Mapping LASCOT 2014Value Stream Mapping LASCOT 2014
Value Stream Mapping LASCOT 2014
Adam Yuret
Busyness lascot15
Busyness lascot15Busyness lascot15
Busyness lascot15
Adam Yuret
A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015
A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015 A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015
A Twenty-Minute Intro to Scrum Lean Agile Scotland 2015
Adam Yuret
Busyness Agile Roots 2015
Busyness Agile Roots 2015Busyness Agile Roots 2015
Busyness Agile Roots 2015
Adam Yuret
The Art of Program Development
The Art of Program DevelopmentThe Art of Program Development
The Art of Program Development
mikespezzano
It report
It reportIt report
It report
tersurmd
Agile leadership (SeaSpin 05/2015)
Agile leadership (SeaSpin 05/2015)Agile leadership (SeaSpin 05/2015)
Agile leadership (SeaSpin 05/2015)
Adam Yuret
"Productivity" is Killing Us.
"Productivity" is Killing Us. "Productivity" is Killing Us.
"Productivity" is Killing Us.
Adam Yuret
Showmybuy kista 2013
Showmybuy kista 2013Showmybuy kista 2013
Showmybuy kista 2013
niclaslindberg

Similar to Android report (20)

Thuc hanh ado.net_bai_03
Thuc hanh ado.net_bai_03Thuc hanh ado.net_bai_03
Thuc hanh ado.net_bai_03
Thanh i畛n
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Nguy畛n Ng畛c Hong
L畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉n
L畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉nL畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉n
L畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉n
Son Nguyen
ChatMessenger
ChatMessengerChatMessenger
ChatMessenger
Di棚n V挑
Dsd05 02b-json-rpca
Dsd05 02b-json-rpcaDsd05 02b-json-rpca
Dsd05 02b-json-rpca
Vn o Ti畉n
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
hoangnguyentien
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956
Ham Ch董i
干稼庄ゃ
干稼庄ゃ干稼庄ゃ
干稼庄ゃ
Chu Chu
Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪
Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪
Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪
aboywithabrokenheart
CyberJutsu - The Joern-ey of Static Code Analysis.pdf
CyberJutsu - The Joern-ey of Static Code Analysis.pdfCyberJutsu - The Joern-ey of Static Code Analysis.pdf
CyberJutsu - The Joern-ey of Static Code Analysis.pdf
Security Bootcamp
7.databinding
7.databinding7.databinding
7.databinding
Dao Uit
Ung dung web chuong 6
Ung dung web  chuong 6Ung dung web  chuong 6
Ung dung web chuong 6
Giang Nguy畛n
Thuc hanh ado.net_bai_03
Thuc hanh ado.net_bai_03Thuc hanh ado.net_bai_03
Thuc hanh ado.net_bai_03
Thanh i畛n
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Nguy畛n Ng畛c Hong
L畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉n
L畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉nL畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉n
L畉p tr狸nh web v畛i c叩c c担ng ngh畛 ph畛 bi畉n
Son Nguyen
ChatMessenger
ChatMessengerChatMessenger
ChatMessenger
Di棚n V挑
Dsd05 02b-json-rpca
Dsd05 02b-json-rpcaDsd05 02b-json-rpca
Dsd05 02b-json-rpca
Vn o Ti畉n
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
hoangnguyentien
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956
Ham Ch董i
干稼庄ゃ
干稼庄ゃ干稼庄ゃ
干稼庄ゃ
Chu Chu
Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪
Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪
Ph但n t鱈ch thi畉t k畉 c董 s畛 d畛 li畛u cho bi to叩n qu畉n l箪
aboywithabrokenheart
CyberJutsu - The Joern-ey of Static Code Analysis.pdf
CyberJutsu - The Joern-ey of Static Code Analysis.pdfCyberJutsu - The Joern-ey of Static Code Analysis.pdf
CyberJutsu - The Joern-ey of Static Code Analysis.pdf
Security Bootcamp
7.databinding
7.databinding7.databinding
7.databinding
Dao Uit
Ung dung web chuong 6
Ung dung web  chuong 6Ung dung web  chuong 6
Ung dung web chuong 6
Giang Nguy畛n

Android report

  • 1. TRUNG TM TIN HOC 畉I H畛C KHOA H畛C T畛 NHIN 畉I H畛C QU畛C GIA TP. H畛 CH MINH B畛 Ph畉n L畉p Tr狸nh Di 畛ng L畉p Tr狸nh Android B叩o C叩o T畛t Nghi畛p Kh坦a L畉p Tr狸nh Android C董 B畉n 畛 Ti: H畛c Vi棚n:Nguy畛n Xu但n D動董ng Hu畛nh 畛c Vinh L畛p:Android t畛i 2,4,6 Gi叩o Vi棚n:B湛i Qu畛c nh
  • 2. N畛i Dung: I.Gi畛i thi畛u 1.畛 ti Ch動董ng tr狸nh s畛 d畛ng webservice l畉y th担ng tin v畛 t畉t c畉 th担ng tin 畛ng 畉t tr棚n th畉 gi畛i v show l棚n giao di畛n. 2.Ph但n t鱈ch v m担 t畉 畛 ti 畛 ti s畉 th畛c hi畛n nh畛ng y棚u c畉u sau: a.X畛 l箪: _G畛i requests l棚n service 畛 l畉y th担ng tin v畛 畛ng 畉t t畛 server v畛. _X畛 l箪 th担ng tin l畉y v畛 (c畉t nh畛ng th担ng tin c畉n l畉y bao g畛m ngy, n董i, matitude ,latitude v longtitude) r畛i l動u vo contentprovider. _C叩c thao t叩c l畉y data v l動u data 畛 tr棚n s畉 動畛c th畛c hi畛n th担ng qua 1 service ch畉y ng畉m. _Listview (main Activity)s畉 d湛ng 畛 hi畛n th畛 th担ng tin 畛ng 畉t l棚n mn h狸nh .Listview s畉 l畉y d畛 li畛u t畛 content provider. b.Ch畛c nng: _Khi click vo 1 row tr棚n listview s畉 hi畛n th畛 th担ng tin chi ti畉t c畛a tr畉n 畛ng 畉t th担ng qua 畛i t動畛ng dialog. _Khi click menu (option menu) s畉 c坦 2 ch畛c nng l refresh v references .Refresh dung 畛 load l畉i d畛 li畛u t畛 data l棚n listview .Ch畛c nng reference dung 畛 ch畛n ch畉 畛 update t畛 畛ng hay kh担ng v th畛i gian update t畛 畛ng l bao l但u 畛ng th畛i h畛 tr畛 th棚m 1 filter 畛 l畛c ra nh畛ng tr畉n 畛ng 畉t l畛n h董n gi叩 tr畛 動a vo. II.Thu畉t to叩n 1.L畉y d畛 li畛u t畛 server (d動畛i d畉ng XML): public void doRefreshEarthquakes() { try{
  • 3. URL url = new URL( "http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(url.openStream())); doc.getDocumentElement().normalize(); NodeList nodeList = doc.getElementsByTagName("entry"); //Log.i("test",); /** Assign textview array lenght by arraylist size */ for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); Element fstElmnt = (Element) node; NodeList idList = fstElmnt.getElementsByTagName("georss:point"); Element idElement = (Element) idList.item(0); idList = idElement.getChildNodes(); String point=((Node)idList.item(0)).getNodeValue(); String[] location = point.split(" "); Location l = new Location("dummyGPS"); l.setLatitude(Double.parseDouble(location[0])); l.setLongitude(Double.parseDouble(location[1])); NodeList titleList = fstElmnt.getElementsByTagName("title"); Element titleElement = (Element) titleList.item(0); titleList = titleElement.getChildNodes(); String details=((Node) titleList.item(0)).getNodeValue(); String magnitudeString = details.split(" ")[1]; int end = magnitudeString.length()-1; double magnitude = Double.parseDouble(magnitudeString.substring(0, end)); details = details.split(",")[1].trim(); NodeList dateList = fstElmnt.getElementsByTagName("updated"); Element dateElement = (Element) dateList.item(0); dateList = dateElement.getChildNodes(); String dd=((Node)dateList.item(0)).getNodeValue(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM- dd'T'hh:mm:ss'Z'"); Date qdate = new GregorianCalendar(0,0,0).getTime(); try { qdate = sdf.parse(dd); } catch (ParseException e) { e.printStackTrace(); } NodeList linkList = fstElmnt.getElementsByTagName("link"); Element linkElement = (Element) linkList.item(0); linkList = linkElement.getChildNodes();
  • 4. String link1=linkElement.getAttribute("href"); Quake quake=new Quake(qdate, details, l,magnitude, link1); //lay 1 doi tuong moi ve addNewQuake(quake); } } catch (Exception e) { System.out.println("XML Pasing Excpetion = " + e); Log.i("test", "null pointer"); } } II.Th畛c hi畛n 1.Code ch動董ng tr狸nh a.S董 畛 t畛ng qu叩t Option Menu References ListView (Main Activity) (atoupdate v filter theo matitude) loadQuakesFromProvider() l畛c th担ng qua reference b畉n l棚n Intent Contentprovider Service l動u data
  • 5. Send get Qake Internet b.Code 畛 但y s畉 tr狸nh by theo t畛ng l畛p v sau 坦 l m畛i li棚n k畉t gi畛a ch炭ng. b.1C叩c l畛p _Quake class: l 1 畛i t動畛ng l動u c叩c th担ng tin c畛a 1 畛i t動畛ng Quake bao g畛m: date(ki畛u date time),longtitude(long),latitude(long),matitude(long), area(String). private Date date; private String details; private Location location; private double magnitude; private String link; _EarthQuake2011V1Activity class: l m畛t main Activity d湛ng 畛 hi畛n th畛 th担ng tin c畛a Quakes l棚n mn h狸nh. EarthQuake2011V1Activity _updateData() +Start service _updateFromReference() +L畉y c叩c th担ng s畛 l動u vo references trong l畛p Reference 畛 filter ,x畛 l箪.
  • 6. _addQuakeToArray() +add 1 畛i t動畛ng quake vo earthquakes array. _loadQuakeFromProvider() +L畉y d畛 li畛u t畛 provider l棚n theo t畛ng row r畛i 畛 vo 畛i t動畛ng quake(1 row trong provider s畉 動畛c l動u vo 1 quake )ti畉p 坦 l add quake vo quakes array (th担ng qua hm addQuakeToArray()) _EarthQuakeBroadCastReceiver class:l畛p ny ny k畉 th畛a t畛 BroadcastReceiver d湛ng 畛 b畉t l畉y intent b畉n l棚n t畛 sevice khi c坦 1 quakes m畛i 動畛c update. Ngoi c叩c ph動董ng th畛c tr棚n th狸 l畛p ny c嘆n override l畉i 1 s畛 ph動董ng th畛c c畛a Activity 畛 t畉o option menu,v dialog. _EarthQuakeProvider class:l畛p ny k畉 th畛a t畛 Contentprovider class d湛ng 畛 t畉o database v cung c畉p 1 s畛 ph動董ng th畛c 畛 thao t叩c d畛 li畛u. // Column Names public static final String KEY_ID = "_id"; public static final String KEY_DATE = "date"; public static final String KEY_DETAILS = "details"; public static final String KEY_LOCATION_LAT = "latitude"; public static final String KEY_LOCATION_LNG = "longitude"; public static final String KEY_MAGNITUDE = "magnitude"; public static final String KEY_LINK = "link"; private static final String DATABASE_CREATE = "create table " + EARTHQUAKE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_DATE + " LONG, " + KEY_DETAILS + " TEXT, " + KEY_LOCATION_LAT + " FLOAT, " + KEY_LOCATION_LNG + " FLOAT, " + KEY_MAGNITUDE + " FLOAT, " + KEY_LINK + " TEXT);"; @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sort) { } @Override public Uri insert(Uri _uri, ContentValues _initialValues) { } @Override
  • 7. public int delete(Uri uri, String where, String[] whereArgs) { } @Override public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { } EarthQuakeService class:k畉 th畛a t畛 l畛p Sevice ch畉y ng畉m g畛i request v _ l畉y data t畛 server.Sau 坦 l動u d畛 li畛u xu畛ng provider. EarthQuakeService _refreshEarthquakes() +Start 1 new thread th畛c thi hm bachgroundRefresh(). _backgroundRefresh() l 1 Runable +Override hm void run() v th畛c thi ph動董ng th畛c doFreshEarthQuakes(). _TimerTask doRefresh() +Th畛c thi ph動董ng th畛c refreshEarthquakes() trong hm run . _onStart() + C叩c hm tr棚n s畉 動畛c s畛 d畛ng khi ta ch畛n ch畉 畛 auto update trong References.N畉u kh担ng update t畛 畛ng th狸 s畉 g畛i hm doRefreshEarthQuake() _doRefreshEarthQuake(): +S畉 th畛c hi畛n k畉t n畛i v畛i server 畛 l畉y d畛 li畛u v畛 sau khi l畉y v畛 s畉 畛 d畛 li畛u vo 畛i t動畛ng Quake r畛i add vo provider. _addNewQuake() +Hm ny d湛ng 畛 add d畛 li畛u vo provider _announceNewQuake() +Hm ny s畉 動畛c b畉n l棚n n畉u c坦 1 quake m畛i 動畛c l動u vo provider +Trong hm ny ta th畛c thi 1 status notification 畛 khi c坦 1 quake m畛i 動畛c c畉p nh畉t th狸 status ny s畉 b畉n l棚n th担ng b叩o cho ng動畛i d湛ng bi畉t. 2.Giao di畛n a.Mn h狸nh ch鱈nh: s畉 hi畛n th畛 danh s叩ch c叩c earthquakes
  • 10. b.EarthQuake details:khi click vo 1 row tr棚n listview s畉 hi畛n th畛 dialog 畛 show details
  • 11. c.Option Menu: g畛m 2 ch畛c nng l refresh v reference.Refresh s畉 load l畉i data t畛 provider.C嘆n Reference th狸 s畉 set c叩c ch畉t 畛 auto update v filter theo matitude.
  • 15. *Mn h狸nh sau khi filter v畛i matitude b畉ng 5: