150875
numer indeksu
Grzegorz Graczyk
imię i nazwisko
151021
numer indeksu
Paweł Tarasiuk
imię i nazwisko
Data 2010-03-03
Kierunek Informatyka Rok akademicki 2009/10
Semestr 4
Grupa dziekańska 2
Laboratorium telekomunikacji
Zadanie 5
Krótki wstęp
Przygotowany przez nas program, mający działać na telefonie komórkowym, został napisany w języku Java, z przeznaczeniem dla technologii J2ME (Java Micro Edition). Środowisko uru- chomieniowe języka Java jest bardzo dobrze rozpowszechnione na telefonach komórkowych oraz urządzeniach mobilnych, dzięki czemu stworzone przy pomocy J2ME aplikacje mogą być urucha- miane na bardzo serokiej gamie urządzeń. Nasz program pozwala odczytać aktualne, oficjalnie podane przez Narodowy Bank Polski kursy walut za pomocą urządzenia mobilnego majacego dostęp do Internetu. Wykorzystany jest w tym celu plik XML udostępniany poprzez serwer http działający w domenie nbp.pl.
Program posiada prosty interfejs wyświetlający wszystkie kursy oraz pozwalającty wyszukać konkretną walutę, w celu odczytania jej kursu. Wydzielona została osobna klasa ”TabelaKur- sow”, której zadaniem jest zarządzanie otrzymaną w postaci pliku XML z Internetu informacją.
Pisanie w języku Java jest w zasadzie identyczne z tym, co robimy w ramach Programowania Komponentowego - jedyną rzeczą specyficzną dla niniejszego programu jest tworzenie interfej- sów dla telefonu komórkowego za pomocą javax.microedition.lcdui oraz zarządzanie połączeniem internetowym przez biblioteki z javax.microedition.io.
Kod źródłowy obu stworzonych klas (klasy głównej oraz klasy TabelaKursow) załączony jest poniżej:
Plik MyApplication.java
i m p o r t j a v a . i o . I O E x c e p t i o n ; i m p o r t j a v a . i o . I n p u t S t r e a m ;
i m p o r t j a v a x . m i c r o e d i t i o n . i o . C o n n e c t o r ; i m p o r t j a v a x . m i c r o e d i t i o n . i o . H t t p C o n n e c t i o n ; i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . Command ;
i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . CommandListener ; i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . D i s p l a y ;
i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . D i s p l a y a b l e ; i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . Form ;
i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . TextBox ; i m p o r t j a v a x . m i c r o e d i t i o n . l c d u i . T e x t F i e l d ; i m p o r t j a v a x . m i c r o e d i t i o n . m i d l e t . MIDlet ;
i m p o r t j a v a x . m i c r o e d i t i o n . m i d l e t . M I D l e t S t a t e C h a n g e E x c e p t i o n ; i m p o r t j a v a x . xml . p a r s e r s . SAXParser ;
i m p o r t j a v a x . xml . p a r s e r s . SAXParserFactory ;
p u b l i c c l a s s M y A p p l i c a t i o n e x t e n d s MIDlet i m p l e m e n t s CommandListener { H t t p C o n n e c t i o n conn ;
Form form ;
TabelaKursow dane ; Command s e a r c h , f i n d ;
S t r i n g p a t t e r n=” ”; TextBox t e x t b o x ;
p u b l i c M y A p p l i c a t i o n ( ) { dane = new TabelaKursow ( ) ; t r y {
conn = ( H t t p C o n n e c t i o n ) C o n n e c t o r . open (” h t t p : / / nbp . p l / k u r s y / xml / a 0 8 4 z 1 0 0 4 3 0 . xml ”) ; conn . s e t R e q u e s t M e t h o d ( H t t p C o n n e c t i o n .GET) ;
I n p u t S t r e a m i s = conn . o p e n I n p u t S t r e a m ( ) ;
SAXParserFactory f a c t o r y = SAXParserFactory . n e w I n s t a n c e ( ) ; t r y {
SAXParser p a r s e r = f a c t o r y . newSAXParser ( ) ; p a r s e r . p a r s e ( i s , dane ) ;
} c a t c h ( E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ; }
} c a t c h ( I O E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ;
Telekomunikacja: Grzegorz Graczyk i Paweł Tarasiuk 2 / 4
}
s e a r c h = new Command(” S e a r c h ”,Command .OK, 1 ) ; form = new Form (” C u r r e n c y ”) ;
form . addCommand ( s e a r c h ) ; form . setCommandListener (t h i s) ;
t e x t b o x = new TextBox (” S e a r c h what ”,” ”, 3 0 , T e x t F i e l d .ANY) ; f i n d = new Command(” Find ”,Command .OK, 1 ) ;
t e x t b o x . addCommand ( f i n d ) ;
t e x t b o x . setCommandListener (t h i s) ;
D i s p l a y . g e t D i s p l a y (t h i s) . s e t C u r r e n t ( form ) ; u p d a t e ( ) ;
}
p u b l i c v o i d u p d a t e ( ) { form . d e l e t e A l l ( ) ;
f o r( i n t i = 0 ; i < dane . p o z y c j e . s i z e ( ) ; i++ )
i f( ( ( P o z y c j a ) dane . p o z y c j e . e l e m e n t A t ( i ) ) . match ( p a t t e r n ) ) form . append ( dane . p o z y c j e . e l e m e n t A t ( i ) . t o S t r i n g ( ) + ” \n”) ; }
p r o t e c t e d v o i d d e s t r o y A p p (b o o l e a n a r g 0 ) t h r o w s M I D l e t S t a t e C h a n g e E x c e p t i o n { }
p r o t e c t e d v o i d pauseApp ( ) { }
p r o t e c t e d v o i d s t a r t A p p ( ) t h r o w s M I D l e t S t a t e C h a n g e E x c e p t i o n { }
p u b l i c v o i d commandAction (Command a r g 0 , D i s p l a y a b l e a r g 1 ) { System . o u t . p r i n t l n (” H e l l o ”) ;
i f( a r g 0 . e q u a l s ( s e a r c h ) ) {
D i s p l a y . g e t D i s p l a y (t h i s) . s e t C u r r e n t ( t e x t b o x ) ; }
i f( a r g 0 . e q u a l s ( f i n d ) ) {
p a t t e r n = t e x t b o x . g e t S t r i n g ( ) ; u p d a t e ( ) ;
D i s p l a y . g e t D i s p l a y (t h i s) . s e t C u r r e n t ( form ) ; }
}
}
Plik TabelaKursow.java
i m p o r t j a v a . u t i l . S t a c k ; i m p o r t j a v a . u t i l . V e c t o r ;
i m p o r t o r g . xml . s a x . A t t r i b u t e s ; i m p o r t o r g . xml . s a x . SAXException ;
i m p o r t o r g . xml . s a x . h e l p e r s . D e f a u l t H a n d l e r ;
c l a s s P o z y c j a {
p u b l i c S t r i n g nazwaWaluty ; p u b l i c i n t p r z e l i c z n i k ; p u b l i c S t r i n g kodWaluty ; p u b l i c d o u b l e k u r s S r e d n i ; p u b l i c S t r i n g t o S t r i n g ( ) {
r e t u r n nazwaWaluty + ” \n [ ” + I n t e g e r . t o S t r i n g ( p r z e l i c z n i k ) + ” PLN = ” + Double . t o S t r i n g ( k u r s S r e d n i ) + ” ” + kodWaluty + ” ] ”; }
p u b l i c b o o l e a n match ( S t r i n g p a t t e r n ) {
i f( p a t t e r n . l e n g t h ( ) < 1 | | nazwaWaluty . i n d e x O f ( p a t t e r n ) >= 0 | | kodWaluty . e q u a l s ( p a t t e r n ) ) r e t u r n t r u e;
r e t u r n f a l s e; }
Telekomunikacja: Grzegorz Graczyk i Paweł Tarasiuk 3 / 4
}
p u b l i c c l a s s TabelaKursow e x t e n d s D e f a u l t H a n d l e r { p r i v a t e S t a c k s t a t e s ;
p r i v a t e P o z y c j a p o z y c j a ; p u b l i c V e c t o r p o z y c j e ;
p u b l i c TabelaKursow ( ) { p o z y c j e = new V e c t o r ( ) ; }
p u b l i c v o i d s t a r t E l e m e n t ( S t r i n g u r i , S t r i n g localName , S t r i n g qName , A t t r i b u t e s a t t r i b u t e s ) t h r o w s SAXException {
s u p e r. s t a r t E l e m e n t ( u r i , localName , qName , a t t r i b u t e s ) ; s t a t e s . addElement ( qName ) ;
i f( qName . e q u a l s (” p o z y c j a ”) ) { p o z y c j a = new P o z y c j a ( ) ; p o z y c j e . addElement ( p o z y c j a ) ; }
}
p u b l i c v o i d c h a r a c t e r s (c h a r[ ] ch , i n t s t a r t , i n t l e n g t h ) t h r o w s SAXException {
s u p e r. c h a r a c t e r s ( ch , s t a r t , l e n g t h ) ;
S t r i n g v a l u e = new S t r i n g ( ch , s t a r t , l e n g t h ) ; S t r i n g s t a t e = ( S t r i n g ) s t a t e s . p e e k ( ) ; i f( s t a t e . e q u a l s (” n a z w a w a l u t y ”) ) {
p o z y c j a . nazwaWaluty = v a l u e ; }
e l s e i f( s t a t e . e q u a l s (” p r z e l i c z n i k ”) ) {
p o z y c j a . p r z e l i c z n i k = I n t e g e r . p a r s e I n t ( v a l u e ) ; }
e l s e i f( s t a t e . e q u a l s (” k u r s s r e d n i ”) ) {
p o z y c j a . k u r s S r e d n i = Double . p a r s e D o u b l e ( v a l u e . r e p l a c e (’ , ’, ’ . ’) ) ; }
e l s e i f( s t a t e . e q u a l s (” k o d w a l u t y ”) ) { p o z y c j a . kodWaluty = v a l u e ;
} }
p u b l i c v o i d endElement ( S t r i n g u r i , S t r i n g localName , S t r i n g qName ) t h r o w s SAXException {
s u p e r. endElement ( u r i , localName , qName ) ; S t r i n g s t a t e = ( S t r i n g ) s t a t e s . pop ( ) ; i f( s t a t e . e q u a l s (” p o z y c j a ”) )
p o z y c j a = n u l l; }
p u b l i c v o i d endDocument ( ) t h r o w s SAXException { s u p e r. endDocument ( ) ;
s t a t e s = n u l l; }
p u b l i c v o i d s t a r t D o c u m e n t ( ) t h r o w s SAXException { s u p e r. s t a r t D o c u m e n t ( ) ;
s t a t e s = new S t a c k ( ) ;
p o z y c j e . r e m o v e A l l E l e m e n t s ( ) ; }
}
Telekomunikacja: Grzegorz Graczyk i Paweł Tarasiuk 4 / 4