Aplicatie Android Asigurari Si Lucru In Retea cu Asp.net

Lucrare de licență

Aplicatie Android asigurari si lucru in retea cu ASP.Net

Cuprins

Capitolul 1: Introducere

Capitolul2: Sistemul de operare Android și Android SDK (Software development kit).

2.1 Sistemul de operare Android

2.1.1 Scurt istoric

2.1.2 Android Market și aplicațiile sistemului de operare

2.2 Instrumentele oferite de software-ul cu care se dezvoltă aplicați pentru platforma Android

2.3 Dezvoltarea aplicațiilor Android

2.4 Java

2.4.1 Cele mai populare IDE-uri (medii de dezvoltare) pentru a scrie cod Java

2.4.2 Limbajul de programare Java

2.4.3 Garbage collector

2.4.4 Mecanismul de tratare al excepțiilor

2.4.5 Procesele executate în background și clasa AsyncTask

2.4.6 Parsarea documentelor XML

2.5 Crearea unei aplicații Android

2.5.1 Ciclul de viață al unei aplicații Android

2.5.2 Ciclul de viața al unei activități

2.6 Schemele grafice bazate pe XML

2.7 Comunicarea prin intermediul internetului

Capitolul 3: Baze de date

3.1 Scurt istoric

3.2 Rolurile unui sistem de gestionare al bazelor de date

3.3 Arhitectura SGBD-urilor

3.4 Limbajul SQL

3.5 Bazele de date SQLite

3.5.1 SQLite în Android

3.5.2 Lucrul cu baze de date în Android

Capitolul 4: Limbajul C# și ASP.Net și servicii web

4.1 Microsoft Visual Studio și framewor-ul .NET

4.1.1 Scurt istoric

4.2 Limbajul C

4.3 ASP.NET

4.4 Servicii web cu ASP.NET

4.4.1 Crearea unui serviciu web cu ASP.NET

Capitolul 5: Aplicația de asigurări „ProAsigurări” dezvoltată în Android

5.1 Descrierea aplicației

Bibliografie

Capitolul 1

Introducere

Piața telefoanelor mobile este într-o continuă dezvoltare, în ultimii ani s-a ajuns ca performanțele telefoanelor mobile sau al tabletelor să fie egale sau chiar sa depășească performanțele unui calculator personal de tip desktop. Odată cu aceasta a crescut și necesitatea aplicațiilor dezvoltate pentru platformele mobile.

În general utilizatorii telefoanelor mobile nu vor achiziționa prin intermediul smartphone-ului obiecte foarte scumpe, în schimb, vor dori sa achizitționeze obiecte de care au nevoie în mod repetat, obiecte indispensabile și pentru care nu trebuie să plătească sume foarte mari de bani. Un exemplu în acest sens sunt asigurările, fie ele pentru mașină, călătorie sau locuință.

Acesta este unul din motivele pentru care am considerat utilă dezvoltarea unei aplicații pentru telefoanele inteligente cu sistem de operare Android prin intermediul căreia utilizatorii sa își poată achiziționa o poliță de asigurare. Astfel, achiziționarea unei asigurări obligatorie pentru un autoturism aduce un comfort sporit cumpărătorului, care nu mai este nevoit să se deplaseze la sediul unei companii.

Un alt motiv în alegerea temei prezentate este folosirea limbajului Java, și a platformei Android, două dintre cele mai utilizate platforme în domeniul programării. De altfel aplicația dezvoltată acopera mai multe dintre domeniile studiate până acum, printre care lucrul cu baze de date, lucrul in rețea, limbajul de programare Java sau mediul de dezvoltare Eclipse.

Lucrarea este structurată în patru capitole dintre care primul este o prezentare a limbajului Java si al sistemului de operare Android pentru dispozitivele mobile inteligente, în cel de-al doilea capitol sunt prezentate sistemele de gestionare a bazelor de date și integrarea acestora cu platforma Android. Al treilea capitol este o descriere a serviciilor web realizate cu ASP.NET, iar în ultimul capitol este prezentată aplicația Android dezvoltată.

Capitolul 2

Sistemul de operare Android și Android SDK (Software development kit)

2.1 Sistemul de operare Android

Android-ul este un sistem de operare care a apărut în urma unei alianțe formată din 30 de organizații din industria dispozitivelor mobile (creatoare de componente hardware, rețele mobile, companii dezvoltatoare de software) din dorința de a aduce unul dintre cele mai bune dispozitive de pe piața. Rezultatul este un sistem de operare care poate rula pe diverse dispozitive mobile.

Platforma de software Android a fost dezvoltată în baza nucleului de Linux în timp ce interfața grafică a fost concepută inițial pentru dispozitivele mobile cu ecran tactil cum sunt tabletele și telefoanele mobile.

“Primul dispozitiv care a rulat cu sistemul de operare Android a fost HTC Dream,telefon lansat în luna octombrie a anului 2008”.

Codul sursă al sistemului de operare este deținut de Google, fiind o platformă "open source" , permite utilizatorului modificarea acestuia, este dezvoltat în limbajele de programare C, C++ și Java.

2.1.1 Scurt istoric

În octombrie 2003 în Palo Alto, California, patru bărbați au pus bazele unei noi companii, numite Android Inc. Intențiile inițiale ale companiei au fost să dezvolte un sistem de operare pentru camerele digitale, realizând ulterior că piața acestor dispozitive nu era destul de dezvoltată s-au îndreptat spre dezvoltarea unui sistem de operare pentru telefoanele inteligente care să fie în competiție cu Symbian-ul și cu Windows Mobile.

În luna august a anului 2005, fondatorii cheie ai companiei Android Inc. au fost angajați de Google, „gigantul american” plănuind o intrare pe piața smartphone-urilor cu aceasta mișcare.

La Google, o echipă condusă de Andy Rubin ( unul din fondatorii Android Inc.) a dezvoltat platforma pentru dispozitivele mobile bazată pe nucleul Linux, Google începând să o vândă unor operatori de telefonie, promițându-le acestora o platformă flexibilă și care va avea funcționalități noi, dar care vor apărea în timp.

Odată cu apariția iPhone-ului în anul 2007, compania americană a trebuit să se reorienteze în dezvoltarea dispozitivelor sale, astfel proiectul cu nume de cod "Sooner" , un telefon mobil cu ecran tactil și o tastatură qwerty a fost imediat închis.

În octombrie 2008 Open Handset Alliance, alianța formată din cele 30 de companii între care le amintim pe cele importante cum ar fi Google, HTC, Sony și Samsung , unii operatori de telefonie mobilă ca Sprint Nextel și T-Mobile, dar și anumiți dezvolatori de chipset-uri cum ar fi Qualcomm și Texas Instruments au lansat primul dispozitiv pe care rula Android-ul. Acesta s-a numit HTC Dream.

În anul 2010 Google lansează prima serie de dispozitive Nexus, tablete și telefoane pe care rula sistemul de operare Android. Acestea au fost dezvoltate împreună cu compania HTC, astfel a apărut primul smartphone numit Google Nexus One. Seria de dispozitive Nexus a ajuns în anul 2013 la Nexus 5 .

“Începând cu anul 2008 Android-ul a avut parte de numeroase update-uri care au adus îmbunătățiri vizibile sistemului, în prezent, ultima versiune de Android este 4.4.2 numită și KitKat.”

2.1.3 Android Market și aplicațiile sistemului de operare.

Actualul magazin de aplicații Android se numește Google Play, fiind inițial numit Android Market, a fost lansat odată cu primul dispozitiv în octombrie 2005. De altfel aplicația Android prin intermediul căreia pot fi descărcate aplicații direct în dispozitivul utilizatorului se numește Play Store. Android Market, este o aplicație care permite utilizatorului să caute și să descarce aplicații dezvoltate și publicate cu ajutorul platformei Android SDK. De asemenea permite dezvoltatorilor, publicarea și vinderea de aplicații prin intermediul serviciului. Majoritatea aplicațiilor din magazinul virtual pot fi folosite gratis, dar anumite aplicații pot fi descarcate contra cost. Multe dintre aplicații pot fi descarcate doar pentru anumite dispozitive, în funcție de specificațiile hardware ale fiecăruia.

În luna iulie a anului 2013, Google Play conținea nu mai puțin de un milion de aplicații ,care fuseseră în total descarcate de peste 50 de miliarde de ori.

Inițial puteau fi publicate în Android Market doar aplicații gratuite, în 2009 a fost introdus în Statele Unite un sistem prin care dezvoltatorii puteau vinde aplicațiile. În 2011 Google a introdus o platformă web care permite utilizatorilor să descarce și să instaleze aplicațiile direct din browser-ul calculatorului personal.

2.2 Instrumentele oferite de software-ul cu care se dezvoltă aplicați pentru platforma Android

Android-ul include o mulțime de instrumente care pot fi folosite de dezvoltatorii de aplicații. Aici amintim unele librării printre care platforma pentru browserele web, WebKit, aceeași platformă „open source” care este folosită și de browserul Safari de pe Mac OS și iPhone. SQLite este un alt instrument prin care se poate folosi suportul pentru baze de date într-un mod foarte simplu, iar în cazul suportului grafic avem librării precum OpenGL.

Dintre serviciile oferite de dispozitivele mobile avem funcția de telefon în cazul smartphone-urilor, de asemenea camera poate fi accesată în cazul dispozitivelor care dispun de aceasta funcție, dar și serviciile de accesare a locației dispozitivului pot fi utilizate în dezvoltarea unei aplicații.

Platforma Android nu este limitată doar la caracteristicile nucleului Linux. Android-ul conține o mulțime de servicii pentru dezvoltatorii de aplicații.

2.3 Dezvoltarea aplicațiilor Android

Suportul oferit de Google pentru dezvolatorii de aplicații pentru platforma Android este Eclipse, iar aplicațiile sunt dezvoltate în Java.

Java este o platformă oferită de Sun Microsystems. Sun a organizat Java în trei mari ediții: Java SE, Java EE și Java ME. Dezvoltatorii folosesc diferite ediții ale Java pentru a crea programe care să ruleze pe computerele personale, browserele web sau dispozitivele mobile.

Platforma Java SE (Standard Edition) este platflorma Java care dezvoltă aplicații pentru computerele personale (desktop) și de asemenea pentru dezvoltarea applet-urilor, acestea fiind aplicații care rulează în browserele web.

Platforma Java EE (Enterprise Edition) este platformă Java care dezovoltă aplicații de tip servlet care sunt aplicații server.

Platforma Java ME (Micro Edition) este platforma Java care dezvoltă aplicații ce rulează pe telefoanele mobile.

Dezvoltatorii de aplicații Android folosesc o ediție specială a limbajului creată de Google care rulează pe dispozitivele cu Android, cunoscută ca platforma Android.

Platforma Google pentru Android conține o mare parte din librăriile Java SE și cele ale mașinii virtuale cunoscută sub numele de Dalvik. Aceasta rulează pe un nucleu modificat de Linux.

Mașinile virtuale sunt aplicații native care rulează pe un calculator și care interpretează codul, transformându-l in cod binar. Pentru a optimiza procesul de rulare al aplicațiilor complexe mașinile virtuale transformă codul din binar în cod mașină. Dalvik este o mașină virtuală Java, modificată pentru platformele mobile.

Mașina virtuală Dalvik nu suportă clasele standard scrise în Java, având propriul format, numit DEX (Dalvik Executable). Platforma Android vine cu un set de instrumente, care transformă clasele compilate în Java în formatul DEX.

Aplicațiile standard în Java sunt formate din mai multe clase, fiecare stocată separat. DEX îmbină aceste clase într-un singur fișier, numit fișier DEX.

2.4 Java

În anul 1995 Sun Microsystem a dezvăluit prima implementare publică a limbajului de programare Java.

Java este un limbaj de programare orientat pe obiecte. Sintaxa limbajului Java este asemănătoare limbajelor C și C++, cu câteva diferențe, dar Java a fost dezvoltat pentru a avea o securitate mai bună decât limbaje precum C sau C++. Un exemplu în acest sens este faptul că limbajul Java nu folosește pointer-ii (variabilele care conțin adrese de memorie). De altfel Java diferă de C++ prin modificarea unor sintaxe simple. Spre exemplu în Java o iterație trebuie să aibă o condiție booleană, nu poate avea o expresie care să returneze o variabilă integer unde 0 ar însemna fals și o valoare diferită de zero ar însemna adevărat.

Java se poate definii de asemenea ca o platformă pentru executarea programelor.

În contrast cu platformele fizice care conțin procesoare fizice și sisteme de operare, platforma Java este fo al aplicațiilor complexe mașinile virtuale transformă codul din binar în cod mașină. Dalvik este o mașină virtuală Java, modificată pentru platformele mobile.

Mașina virtuală Dalvik nu suportă clasele standard scrise în Java, având propriul format, numit DEX (Dalvik Executable). Platforma Android vine cu un set de instrumente, care transformă clasele compilate în Java în formatul DEX.

Aplicațiile standard în Java sunt formate din mai multe clase, fiecare stocată separat. DEX îmbină aceste clase într-un singur fișier, numit fișier DEX.

2.4 Java

În anul 1995 Sun Microsystem a dezvăluit prima implementare publică a limbajului de programare Java.

Java este un limbaj de programare orientat pe obiecte. Sintaxa limbajului Java este asemănătoare limbajelor C și C++, cu câteva diferențe, dar Java a fost dezvoltat pentru a avea o securitate mai bună decât limbaje precum C sau C++. Un exemplu în acest sens este faptul că limbajul Java nu folosește pointer-ii (variabilele care conțin adrese de memorie). De altfel Java diferă de C++ prin modificarea unor sintaxe simple. Spre exemplu în Java o iterație trebuie să aibă o condiție booleană, nu poate avea o expresie care să returneze o variabilă integer unde 0 ar însemna fals și o valoare diferită de zero ar însemna adevărat.

Java se poate definii de asemenea ca o platformă pentru executarea programelor.

În contrast cu platformele fizice care conțin procesoare fizice și sisteme de operare, platforma Java este formată dintr-o mașină virtuală căreia îi este asociat un mediu de executare al programelor format din mai multe librării și care poate executa mai multe operații, cum ar fi cele matematice (de exemplu trigonometrice sau comunicare prin rețea).

Un program special Java numit Compilator Java traduce codul sursă în instrucțiuni și asociază datele executate de mașina virtuală, aceste instrucțiuni sunt transformate în cod binar. Compilatorul conține codul programului și datele în fișiere a căror extensie este .class.

Un program Java care a fost executat, încarcă toate clasele și pornește mașina virtuală trimițând fișierele de tip .class către mașina virtuală, iar după ce codul pe biți a fost verificat pentru a fi sigură că acesta este valid și nu compromite securitatea aceasta încarcă fișierele. Dacă în codul pe biți se găsește o problemă atunci mașina virtuală este automat oprită. În schimb dacă nu sunt găsite probleme mașina virtuală interpretează codul, executând fiecare instrucțiune pe rând.

Dacă interpretorul de cod observă că o secvență de biți apare de mai multe ori, fiind executată în mod repetat, acesta informează mașina virtuală JIT (Just in time) să compileze aceste instrucțiuni în codul nativ.

Partea de platformă Java promovează portabilitatea, prin rularea pe oricare din platformele Windows, Mac OS sau Linux.

2.4.1 Cele mai populare IDE-uri (medii de dezvoltare) pentru a scrie cod Java

NetBeans IDE este o aplicație cu cod sursă deschis editării, dezvoltat în Java pentru crearea de programe în același limbaj, dar și în altele, cum ar fi PHP, Ruby, C++, Groovy sau Scala. Cea mai nouă versiune de Netbeans este 8.0.

Celalalt IDE cunoscut pentru dezvoltarea aplicaților Java este Eclipse IDE, o altă platformă al cărei cod sursă este deschis editării și pe care se poate scrie cod sursă atât în Java cât și în C, COBOL, PHP, Pearl sau Python. Ultima versiune de Eclipse este 4.3.

Cel mai folosit IDE pentru dezvoltarea aplicaților Android este Eclipse. Acesta a apărut în 2003 ca o platformă gratuită cu diferite extensii contra cost.

În anul 2004 o organizație non profit numită Eclipse Foundation preia controlul întregii platforme Eclipse, făcând ca aceasta să devină un lider al mediilor de dezvoltare Java.

2.4.2 Limbajul de programare Java

Java este un limbaj de programare orientat pe obiecte. Aplicațiile orientate obiect reprezintă entități sub formă unor obiecte. Fiecare obiect încapsulează mai multe însuțiri și funcții ale sale. Fiecare obiect trebuie instantiat (creat). Limbajele ca C++ și Java se referă la un obiect sub forma unei clase. Prin urmare înainte de a crea un obiect trebuie declarată o clasă, în interiorul căreia sunt variabile (locații de memorie a căror valoare poate fi schimbată) și funcții.

Limbajele orientate pe obiecte definesc obiectele sub forma unor instante ale claselor. Fiecare obiect încapsulează diferite atribute și comportamente. Obiectele sunt create cu ajutorul unor funcții definite în interiorul claselor și care se numesc constructori.

Declararea unei clase începe printr-un antet, în antet este definit numele clasei precedat de cuvantul class. Corpul clasei trebuie să înceapă cu o paranteză acoladă deschisă ( { ) și să se încheie printr-o paranteză acoladă închisă ( } ), între acestea două se vor declara funcțiile și variabilele clasei respective.

Variabilele declarate în interiorul celor două acolade sunt atribute ale obiectelor ce urmează să fie declarate.

În limbajul Java variabilele pot fi declarate de tip „private” , „protected” sau „public”, ca de altfel în majoritatea limbajelor de programare orientate pe obiecte. Private înseamnă că metoda sau variabila poate fi accesată doar în interiorul clasei în care a fost declarată. Protected semnifică faptul că variabila poate fi accesată din clasele care fac parte din același pachet cu clasa în care a fost definită variabila respectivă, în timp ce termenul public semnifică faptul că variabila declarată poate fi accesată în oricare din clasele programului.

În general variabilele sunt atribute ale obiectelor, însă pentru a defini o variabilă care aparține clasei din care face parte și care are aceeași valoare pentru fiecare obiect, variabila se definește de tip „static”, iar dacă înaintea cuvântului static apare și cuvântul „final” atunci valoarea variabilei nu poate fi modificată odată ce a fost initializată.

Ca și în celelalte limbaje de programare orientate pe obiect, principalele atribute ale limbajului sunt încapsularea, polimorfismul și moștenirea.

Polimorfismul este o abilitate a unei entități de a avea diferite forme. În cazul limbajului Java polimorfismul apare la supraîncarcarea funcțiilor unei clase în subclasele sale sau în aceeași clasă dacă avem două funcții cu același nume dar cu număr diferit de parametrii.

Incapsularea este proprietatea unei clase de a permite modificarea sau citirea atributelor unui obiect doar în metodele proprii, în timp ce moștenirea facilitează folosirea polimorfismului și a încapsulării permițând extinderea unei clase plecând de la clase deja definite. Spre deosebire de alte limbaje orientate pe obiecte Java permite extinderea la o singură clasă, ceea ce însemnă că nu permite moștenirea multiplă.

2.4.3 Garbage collector (Colectorul de gunoaie)

Java folosește un instrument numit “Garbage collector". Acest instrument găsește obiectele fără referințe și le elimină din memorie pentru a crea mai mult spațiu disponibil, de asemenea acesta distruge și referințele către obiectele distruse. Scenariul este cunoscut ca eliberare a memoriei.

2.4.4 Mecanismul de tratare al excepțiilor

Excepțiile reprezintă devieri de la comportamentul normal al unei aplicații. Excepțiile pot fi însa tratate în timpul rulării aplicației. În Java excepțiile sunt modelate sub forma unor obiecte ce aparțin unei clase derivate din clasa Throwable.

În momentul în care apare o excepție în interiorul unei metode se crează un obiect ce caracterizează excepția respectivă. Aruncarea excepției se face folosind instrucțiunea throw urmată de excepția respectivă. Excepția aruncată este transmisă de mașina virtuală Java într-un bloc try {…}, în cazul în care programul da o eroare excepția este tratată într-un bloc catch {…} ce urmează blocului try. De asemenea în cazul tratării excepțiilor poate fi adaugat și blocul finally {…}, instrucțiunile din interiorul acestuia sunt executate de program, indiferent dacă a fost sau nu nevoie de tratarea unei excepții.

În Java există posibilitatea de a fi create excepții pentru care nu este necesară construirea unor blocuri de tratare a acestora. Aceste excepții au la bază clasa RuntimeException. Excețiile de acest fel sunt erori care pot apărea din cauze interne, cum ar fi accesarea unei variabile nule, ceea ce va duce la generarea unei excepții de tip NullPointerException sau încercarea de accesare a unui element inexistent al unui vector va duce la generarea uni excepții ArrayIndexOutOfBoundException.

2.4.5 Procesele executate în background și clasa AsyncTask

Android-ul permite folosirea clasei Thread pentru a executa procese asincron. De asemenea suportă și clasele ThreadPool și Executor pentru a executa procese în fundal. Însă pentru a face modificări în interfața grafică este necesară sincronizarea unui nou fir de execuție cu firul de execuție al interfeței grafice.

Pentru a simplifica lucrurile, pentru Android, a fost introdusă clasa AsyncTask care încapsulează creare de procese care vor fi executate în background și sincronizarea acestora cu firul principal de execuție. De asemenea AsyncTask permite publicarea progresului în momentul exeuției.

Pentru a folosi AsyncTask este necesară crearea unei clase care să o extindă pe aceasta și suprascrierea metodei doInBackground().

Metodele principale alea clasei AsyncTask sunt:

onPreExecute() metoda apelată înainte ca procesul de fundal să înceapă execuția, iar de obicei în această funcție se va crea și afișa un obiect ProgressBar.

doInBackground(parametrii) aceasta este metoda care rulează firul de execuție în fundal. În această metodă se va regăsi codul care necesită apelarea în background (de exemplu apelarea unei metode web sau citirea dintr-o bază de date). Metoda doInBackground() este apelată de compilator imediat după executarea metodei onPreExecute()

onProgressUpdate() metoda apelată în momentul în care este invocată funcția publishProgress() in doInBackground()

onPostExecute(rezultat) metoda apelată de compilator după execuția doInBackground() parametrul acesteia este rezultatul metodei doInBackground().

AsyncTask este o clasă generică : AsyncTask<Parametrii,Progres,Rezulat>

parametrii sunt datele de intrare trimise către AsyncTask

progresul în cazul în care se apelează onProgressUpdate()

rezultatul returnat de funcția doInBackground()

Odata creată, clasa AsyncTask este executată prin comandă :

new numeClasaAsyncTask().execute(parametru1, parametru2, parametru3)

În momentul unui apel corect al unei metode web răspunsul transmis de server va fi în limbajul XML, de aceea pentru parsarea răspunsului este necesară folosirea unor obiecte cu ajutorul cărora răspunsul va fi parsat.

2.4.6 Parsarea documentelor XML

XML (Extensible Markup Language) a apărut prima dată în 1998. Un document XML este format din mai elemente, fiecare element are un tag start, un conținut și un tag de final. Un document XML trebuie să aibă un singur element rădăcină. Documentele XML trebuie să fie „bine definite”, ceea ce înseamnă că:

fiecare dintre acestea începe cu un prolog (Ex. <?xml version="1.0">)

fiecare tag care a fost deschis trebuie să aibă un tag care îl închide

toate tag-urile sunt grupate imbricat

Pentru a putea fi valid, un document XML trebuie să fie „bine definit".

Limbajul de programare Java conține câteva librării pentru procesarea fișierelor XML. Parsatoarele XML SAX și DOM sunt disponibile și pentru Android.

De asemenea o librărie folosită în parsarea documentelor XML și întâlnită doar în Android se numește XmlPullParser, fiind mai simplă de utilizat decât SAX și DOM.

Clasa XMLReader folosită pentru parsarea în Java cu ajutoul librăriei SAX se află în pachetul „javax.xml.parsers.SAXParserFactory”. Pentru a parsa un document XML este necesară folosirea unui element XMLReader obținut din metoda newSAXParser(). Odată cu crearea acestei instanțe, un fișier XML poate fi parsat indiferent de sursa din care vine (InputStream, fișier, URL sau SAX InputSource).

O calitate a parsatorului SAXParser este ca acesta folosește mai puțină memorie decât un parsator DOM. Parseul SAXParser poate fi folosit însă doar pentru parsarea documentelor XML și nu și pentru crearea acestora.

Pentru structurile mai mari de date, informațiile trimise între tag-urile documentului XML sunt în general în format JSON (JavaScript Object Notation), dar un text în format JSON poate fi transmis și ca parametru într-un XML.

2.4.7 JSON

Un JSON este un mod de formatare a unui text, ce poate fi înteles și de către om, utilizat în reprezentarea obiectelor și a structurilor de date sub forma cheie/valoare fiind o alternativă pentru XML.

Derivat inițial din limbajul JavaScript, JSON a devenit un limbaj independent de formatare al datelor. Parsarea și crearea de date în format JSON este disponibilă pentru majoritatea limbajelor de programare.

Pentru a putea citi datele dintr-un JSON o aplicație Android trebuie să parseze datele trimise prin intermediul acestui tip de dicționar.

Platforma Android conține libraria json.org destinată parsării fișierelor în format JSON.

Principalele elemente cu ajutorul cărora se parsează un fișier JSON sunt JSONObject și JSONArray în cazul în care avem un sir de obiecte.

Valorile extrase dintr-un obiect JSON pot fi șiruri de caractere, numere întregi, numere reale sau chiar valori nule. Pentru a se obține valoarea unei chei în funcție de tipul de date se va folosi getTipDeDate() unde tipul de date poate fi String ,Boolean, Long, Doubl. Funcția getTipDeDate() va returna o excepție de tip JSONException în cazul în care tipul de data la care se referă nu este cel regăsit pentru valoarea a carei cheie a fost transmisă spre parsare.

Pentru crearea unui obiect de tip JSON, se va folosi un obiect de tip JSONObject creat cu new JSONObject și funcția „put” prin care se vor pune valorile în funcție de cheia din care urmează să se facă citirea.

2.5 Crearea unei aplicații Android

O aplicație Android este un fișier numit pachet. Fiecare aplicație are un pachet unic. Numirea pachetelor cât și convenția prin care sunt numite este împrumutată din limbajul Java. Pachetele sunt numite într-o ordine ierarhică cu diferite nivele ierarhice separate prin puncte. De asemenea o aplicație poate conține mai multe pachete însă unul singur se poate referi la aplicație în sine.

Un pachet are un nume unic și poate conține subpachete sau clase. Doar tipurile de date ce au fost declarate de tipul “public" vor putea fi accesate din afara pachetelor.

În momentul crearii unui nou proiect Android, dezvoltatorul va trebui să dea numele pachetului unic, numele aplicației, dar și versiunea minimă de Android pe care aplicația va putea fi instalată.

Fișier-ul nou creat va conține alte câteva directorare, directorul „src” este directorul în care se află clasele Java, în timp ce pachetul aplicației este generat automat tot în acest director. Un alt director care se crează este „gen”,aici se găsesc fișierele generate automat, clasa R în care sunt indexate resursele folosite. Conținutul acestui director este regenerat la fiecare compilare a proiectului. „assets” este directorul în care se află anumite proprietăți.

În directorul „bin” se găsesc clasele compilate, pe care dezvoltatorul nu trebuie să le modifice. Directorul „res” contine mai multe directoare în interiorul cărora se află resursele aplicației în funcție de tipul de ecran al fiecărui dispozitiv. Animațiile sunt salvate în subdirectorul „anim”, culorile în fișierul „colors” din directorul „values”, imaginile sunt salvate în subdirectorul „drawable” în funcție de rezoluțiile fiecărui dispozitiv, fișierele XML sunt salvate în subdirectorul „layout”, alte valori cum ar fi șirurile de caractere folosite se găsesc în alte subdirectoare ale directorului „res”.

La crearea unui proiect nou se crează de asemenea și un fișier .xml numit AndroidManifest.xml și acesta este manifestul aplicației, în care se vor afla mai multe informații ,cum ar fi numele pachetului aplicației, versiunea de cod actuală, versiunea aplicației și anumite permisiuni.

“Ultimul fișier creat automat la crearea unui nou proiect este project.proprietes. Aceasta este o filă folosită de SDK-ul Android la compilarea aplicației.”

2.5.1 Ciclul de viață al unei aplicații Android

Dispozitivele Android dispun de un numar limitat de resurse,de aceea sistemul de operare are dreptul să închidă anumite procese care folosesc prea multe resurse. Pe lângă acest management al resurselor Android-ul crează din nou activitațile în momentul în care apar diverse modificări ale configurației (rotirea ecranului reprezintă un exemplu în acest sens).

Atunci când o aplicație este deschisă se crează un nou obiect aplicație. Acesta execută un proces nou cu un ID unic și un utilizator unic. Acest obiect aplicație dispune de următoarele metode:

onCreate() metoda apelată înainte ca prima componentă a aplicației să fie deschisă.

onLowMemory() metoda apelată de compilator în momentul în care aplicația necesită o curățare a memoriei.

onTerminate() metoda doar pentru testare nu și pentru aplicația publicată

onConfigurationChanged() metoda apelată de fiecare dată când configurația este modificată.

Obiectul aplicație rulează atâta timp cât una din componentele aplicației rulează și ea. Dacă sistemul Android necesită terminarea unui proces acesta urmează o regulă a priorităților

Prioritatea cea mai mare o are aplicația cu care utilizatorul interactionează, aceasta va fi inchisă ultima.

Activitățile cu care utilizatorul nu interactionează, dar care au un serviciu care lucrează sau care este folosit de activitatea afișată utilizatorului.

Aplicațiile care au un serviciu care rulează, dar care nu fac parte din primele două categorii.

Aplicațile care sunt închise în fundal dar care încă folosesc resursele sistemului.

Aplicațiile fără nicio componentă activă vor fi închise primele de către sistem.

2.5.2 Ciclul de viața al unei activități

O actvitate este o componenta a unei aplicații care afisează un ecran cu care utilizatorul poate interacționa pentru a face orice, ca de exemplu apeluri telefonice, scrie mesaje sau folosește camera pentru a face poze.Aproape toate activitățile interacționează cu utilizatorul. De obicei activitățile sunt trecute în fișierul AndroidManifest.xml, tot aici specificându-se care este activitatea care va deschide aplicația. Pentru a crea o activitate este necesară crearea unei clase care va extinde clasa Activity. Clasa Activity are grijă de crearea ferestrelor în care dezvoltatorul poate plasa interfața grafică (cu ajutorul funcției setContentView (view)).

O activitate poate avea unul din următoarele patru statusuri

Rulează: activitatea este vizibilă și interactionează cu utilizatorul

Pe pauză: activitatea este încă vizibilă dar doar parțial

Oprită: activitatea nu mai este vizibilă

Închisă : activitatea a fost terminată de sistem prin apelarea funcției finish()

Pentru a controla statusurile unei activități, sistemul, vine în ajutorul dezvoltatorului cu un set de metode predefinite :

onCreate() , metoda apelată atunci când o activitate este creată. Aceasta metodă este folosită pentru inițializarea unei activități

onResume(), apelată dacă activitatea devine vizibilă din nou și utilizatorul începe să interacționeze cu aceasta.

onPause(), apelată atunci când activitatea intră în fundal, si de fiecare dată când o activitate urmează să fie terminată

onStop (), metoda apelatat atunci când activitatea nu mai este vizibilă.

Ciclul unei activități și cele mai importante metode în diagrama din figura Fig 1 (Pag 12).

Fig 1.

2.6 Schemele grafice bazate pe XML

Cel mai des întâlnit mod de a defini interfețele grafice în Android sunt schemele XML salvate în directorul de resurse al aplicației. În acest fel dezvoltatorul poate menține interfața grafică separată de codul sursă în care va fi descris comportamentul unei activități.

Așa cum sugerează numele, schemele grafice XML reprezintă fișiere a căror extensie este .xml. Android-ul consideră aceste scheme XML ca fiind resurse pe care le reține în directorul res\layout din interiorul proiectului Android.

Fiecare fișier XML conține elemente specifice care formează fiecare unul din ecranele aplicației cu care va interacționa utilizatorul. Fișierele sunt formate din mai multe elemente, fiecare elemen având anumite proprietăți care descriu aspectul și comportamentul acestora. Spre exemplu un buton cu atributul „android:textStyle = "bold" ” sugerează faptul că textul scris pe buton va apărea îngroșat.

SDK-ul Android vine cu un instrument numit aapt care ajută dezvoltatorul în formarea acestor scheme. De asemenea fișierul R.java din directorul gen, care conține fiecare id al elementelor din fișierul XML este generat de către același instrument, aapt, permitând dezvoltatorului accesarea în codul Java al fiecarui element XML.

Pentru a adauga un text într-un fișier xml care să apară în ecranul dispozitivului este necesară adaugarea unui tag „<TextView>”. Pentru un buton se va adăuga tag-ul „<Button>”, iar pentru o imagine vom adăuga tag-ul „<ImageView>”.

Fiecăruia dintre aceste widget -uri i se vor adăuga anumite proprietăți. Fiecăruia va trebui setata lunigmea și lățimea prin atributele „android:layout_height=” respectiv „android:layout_width=”. Acestea pot avea fie valori numerice urmate de unitatea de măsură, care poate fi spre exemplu pixel (px) sau pot fi urmate de atributele „wrap_content” sau „match_parent”, ceea ce înseamnă că sunt de lungime variabilă în funcție de lungimea textului respectiv atât cât este lungimea ecranului.

Pentru widget-urile în a căror conținut poate fi adăugat text se va pune atributul „android:text=” urmat de un sir de caractere cuprins între semnele de punctuație „ " ”.

Tot în aceste widget-uri poate fi setată culoarea textului prin atributul „android:textColor=” urmat de codul culorii în format hexazecimal. Marimea fontului poate fi setată cu ajutorul atributului „android:textSize=”, urmat de un număr și unitatea de măsura, care poate fi în (inch), px (pixel), mm (milimetrii) sau sp (pixel scalat). Pentru a putea fi accesate în interiorul subclaselor clasei Activity a aplicației, fiecare din widget-uri va avea un id. Acesta se va adăuga prin atributul „android:id=”, iar în fișierele cu extensia java acestea vor fi accesate prin metoda findViewById cu parametrul R.drawable.id.

În cazul adăugării unui buton, Android-ul oferă posibilitatea de a seta un eveniment în cazul în care butonul este apăsat, iar în fișierul xml, în interiorul tag-ului „<Button>” va fi setat atributul „android:onClick” urmat de numele unei metode definite într-o clasă derivată din clasa „Activity”.

Android-ul are de asemenea două widget-uri care ajută la inserarea imaginilor în fiecare ecran. Acestea sunt „<ImageView>” și „<ImageButton>”, care așa cum sugerează și numele sunt bazate pe TextView și Button. Pentru a pune o imagine în fiecare din cele două widget-uri se va adăuga atributul „android:src=” urmat de o referință la o resursă din directorul drawable.

Majoritatea atributelor care pot fi adăugate într-o schemă XML

22 și pot fi modificate în interiorul codului Java, de exemplu folosim setTypeface() pentru a seta stilul textului unui buton sau setTextSize() atunci când vrem să setam mărimea fontului.

În cazul butoanelor în loc „android:onClick=”, evenimentul se poate adăuga prin metoda „setOnClickListener()”, cu un singur parametru, acesta fiind un obiect de tip „OnClickListener”.

Acestea nu sunt singurele widget-uri ce pot fi folosite în interiorul fișierelor XML, pot fi adăugate butoane de tip RadioButton, sau butoane CheckBox, dar pot fi create și tabele sau liste care sunt populate static sau dinamic în clasele ce extind clasa Activity.

Android-ul nu este singurul care folosește XML pentru a crea schemele grafice, XML-ul este folosit și de către Microsoft (XAML) sau de către Adobe, Google sau Mozila.

2.7 Comunicarea prin intermediul internetului

Majoritatea, dacă nu toate dispozitivele Android au acces la internet, indiferent că se face prin wireless sau prin intermediul cartelei sim. Android-ul oferă dezvoltatorilor un nivel ridicat de accesare al internetului prin componenta browser integrată numită WebKit.

De asemenea există și librări care permit accesul prin diferite protocoale cum sunt HTTP, HTTPS, XMPP, SMTP și altele.

Android-ul nu are suport pentru protocoale SOAP, în schimb există libraria Apache HttpClient pentru a accesa serviciile web de tip REST. Acestea sunt simple cereri HTTP pentru adrese web normale care trimit răspunsul într-un format XML sau JSON.

Operațiile prin Appache HttpClient se fac diferit în funcție de verbul care este pus după „HTTP” (GET,POST). În momentul creeri unei cereri HttpRequest se implementează anumite instanțe, se folosește un URL care este accesat și de alte date de configurare (de exemplu valori care sunt trimise printr-un HttpPost), iar apelul către serviciul web este făcut printr-o cerere „execute()”.

Ceea ce urmează apelării serviciului web este primirea unui cod răspuns, care poate fi unul simplu (exemplu „ok” însemnând că apelul a fost făcut cu succes) sau poate fi un răspuns în urma căruia se primește un JSON, un XML, sau chiar o pagina HTML care conține mai multe informații.

Parsarea răspunsurilor primite prin intermediul apelurilor serviciilor web se face cu ajutorul unor librării pe care SDK-ul Android le conține. Spre exemplu pentru a parsa un fișier XML se va folosi un parsator SAX (org.xml.sax), pentru parsarea unui JSON Android-ul dispune de libraria org.json.

Începând cu versiunea de Android 2.2, Android-ul dispune de clasa AndroidHttpClient, care face parte din pachetul android.net.http.package. Acesta este o implementare a interfeței HttpClient. AndroidHttpClient nu permite dezvoltatorului folosirea sa decât în spatele unei alte acțiuni pentru a nu determina blocarea aplicației. De exemplu pentru un apel prin care se dorește trimiterea unor informații către o bază de date fără a se aștepta răspunsul, aceasta poate fi facută în spate fără a deranja utilizatorul.

În cazul în care se așteaptă un răspuns, utilizatorului i se va afișa un mesaj sau un grafic care să specifice durata de așteptare.

Apelurile către serviciile web necesită anumite permisiuni care sunt trecute în fișierul AndroidManifest, cel care conține detaliile despre versiunea aplicației, fiecare activitate în funcție de pachetul din care face parte, dar și anumite permisiuni. Pentru a putea apela un serviciu web trebuie adaugată permisiunea INTERNET (<uses-permission android:name="android.permission.INTERNET" />).

Capitolul 3

Baze de date

O baza de date este o colecție de date care descriu atribute și activități. Datele din interiorul acestora sunt de obiecei organizte în așa fel încât pot fi usor de accesat în momentul procesării informației.

Sistemele de gestionare a bazelor de date sunt programe destinate gestionării colecțiilor mari de date, singura alternativă a sistemelor este stocarea datelor în fișiere.

3.1 Scurt istoric

Încă de la începutul folosirii calculatoarelor dezvoltatorii au căutat metode de a stoca colecții mari de date. Primul sistem de gestionare al unei baze de date a apărut în anul 1960 fiind dezvoltat de Charles Bachman și a fost numit „Integrated data store”, cu această lucrare el a caștigat în anul 1973 premiul ACM Turing.

Tot în anul 1960 compania americană IBM a dezvoltat Information Management System, un alt sistem de gestionare al bazelor de date care este folosit și astăzi de anumite companii. Acesta a fost baza unei alternative de reprezentare a datelor care s-a numit model de date ierarhic.

În anii 1970 Edgar Codd, tot la IBM, a propus un nou model de reprezentare al datelor numit relațional, care s-a dovedit a fi o inovație în domeniul bazelor de date. Noul model i-a adus lui Codd premiul Turing în anul 1981.

În anii 1980 modelul de date relațional a devenit dominant în cadrul sistemelor de gestionare al bazelor de date. Limbajul SQL (sintax query language), apărut la sfârșitul anilor 1980 și dezvoltat de IBM a devenit un limbaj standard în cadrul bazelor de date, fiind folosit și astăzi. Tot atunci au apărut programele orientate pe obiecte, iar programatorii au început să trateze datele din tabele sub formă unor obiecte ce conțin atribute, de altfel pentru bazele de date orientate pe obiecte a fost dezvoltat și un limbaj standard de interogare numit OQL (Object Quey Language).

În anii 1990 sunt dezvoltate produse mai complexe de gestionare a bazelor de date. Astfel modelul client-server apare în tot mai multe aplicații din domeniul economiei. Microsoft lansează Excel și Acces, programe mai puțin complexe.

După anul 2000 s-au dezvoltat tot mai multe aplicații după modelul client-server, companiile cele mai importante din acest domeniu rămânând Microsoft, Oracle si IBM.

Apare modelul obiect relațional, care se construiește prin dezvoltarea sistemului relațional adăugând caracteristici obiectuale sau pornind de la un sistem orientat pe obiecte și adăugând caracteristici relaționale.

3.2 Rolurile unui sistem de gestionare al bazelor de date

Sistemul de gestionare al bazelor de date (SGBD) are rolul de a furniza suportul software privind dezvoltarea aplicațiilor ce conțin baze de date. Un alt rol al acestuia este de a minimiza costurile de prelucrare a datelor, de a fi rapid în răspunderea la cerințele dezvoltatorului. De asemenea trebuie să asigure flexibilitatea și protecția datelor.

Un SGBD trebuie să asigure:

redundanța datelor – daca această caracteristică nu este îndeplinită și aceleași date apar de mai multe ori, se pot genera anumite probleme. În unele cazuri este necesară acceptarea unei anumite redundanțe pentru a crește timpul de răspuns al programului. Un exemplu în acest sens este cunoscut sub numele de normalizare a datelor.

securitatea datelor prin restricționarea accesului utilizatorilor care nu au fost autorizați. Atunci când mai mulți utilizatori accesează aceeași bază de date, majoritatea nu vor avea autorizația să acceseze sau să modifice orice informații în baza respectivă, unele fiind confidențiale, și doar anumite persoane avînd permisiunea de a le accesa.

eficiență în executarea interogăriilor și modificărilor aduse datelor. De asemenea ele trebuie să ofere structuri specializate de date, dar și tehnici de căutare rapide pentru a vedea înregistrările dorite. In acest scop sunt folosite fișierele auxiliare numite indecși. Aceste fișiere au o structură de arbore.

opțiunea de a face backup și restaurare – este necesară în cazul în care se pierd anumite date sau în cazul în care în timpul unor modificări majore, calculatorul se oprește sau apar alte probleme, utilizatorul trebuie să aibă posibilitatea de a recupera datele șterse sau modificate și de a restaura baza de date.

reprezentarea unor relații complexe între date.

O bază de date poate conține o varietate de date, prin urmare SGBD-ul trebuie să aiba capacitatea de a reprezenta relații complexe între aceste date și să ofere posibilitatea de a adauga sau de a modifica relațiile în cazul în care este necesar.

integritatea datelor. Un SGBD trebuie să asigure integritatea datelor prin protejarea de animite intervenții.

permiterea de modificări pe baza unor reguli. Unele sisteme de gestionare au capacitatea de a defini anumite reguli privind introducerea de noi informații într-o baza de date. Aceste sisteme se numesc sisteme deductive ale bazelor de date.

minimizarea timpului de dezvoltare al aplicațiilor

flexibilitate

posibilitatea de a modifica și de a adauga noi date

3.3 Arhitectura SGBD-urilor

De la începutul dezvoltării SGBD-urilor acestea au evoluat de la un pachet software simplu la SGBD-urile moderne cu un design modular și o arhitectură client-server.

O arhitectura client-server este distribuită în două module. Un modul client care lucrează de la un dispozitiv mobil sau de la computer personal cu aplicații care pot accesa baza de date printr-o interfața grafică, iar cel de-al doilea modul care este serverul, cel care deține toate informațiile din tabele, le accesează și trimite interogări bazei de date.

În general SGBD-urile au o configurație dezvoltată pe trei nivele de componente

nivelul intern care descrie structura fizică a bazei de date și conține detalii despre datele stocate și căi de acces pentu baza de date

nivelul conceptual descrie structura întregii baze de date pentru fiecare grup de utilizatori. Schema conceptuală descrie de asemenea entitățile, tipurile de date, relațiile dintre tabele, operațiile făcute de utilizatori,dar și constrângerile.

nivelul extern sau de vizitator are rolul de a ascunde anumite părți ale bazei de date pentru anumite grupuri de utilizatori și de a permite vizitarea doar a părților de căre utilizatorul interesat.

3.4 Limbajul SQL

Limbajul SQL poate fi considerat unul din motivele majore pentru succesul comercial al bazelor de date relaționale, devenind limbajul standard pentru acest model de baze de date, oferind de asemenea un avantaj utilizatorilor care pot face o interogare asupra mai multor baze de date fără a modifica sintaxa. Desigur dacă fiecare din acestea suportă limbajul standard SQL.

Numele de SQL provine de la Structured Query Language (Limbaj Structurat de Interogare), iar numele inițial al limbajului a fost SEQUEL fiind implementat și numit astfel de IBM, având scopul de a manipula bazele de date relaționale.

Principala comandă SQL pentru a defini date este „CREATE” folosit pentru a crea tabele, afirmații sau triggere. Comanda „create table” este utilizată pentru a crea o nouă tabelă, o nouă relație între tabele existente și tabelul nou creat. De asemenea prin aceasta comandă se specifică atributele și constrângerile inițiale. Pentru fiecare atribut trebuie specificat tipul de date și un nume. Constrângerile pot fi de exemplu „not null” sau o constrângere pentru o coloana cu atribute unice. Atributele și constrângerile pot fi adăugate și după ce tabelul a fost creat, cu ajutorul comenzii „alter table”.

3.4.1 Tipuri de date și domenii în SQL

tipul numeric include datele de tip întreg (INTEGER,INT sau SMALLINT) și tipurile de date reale;

caractere și șiruri de caractere care pot avea lungime fixă CHAR(n) unde n este numărul de caractere, sau lungimea variabilă VARCHAR (n) unde n în acest caz este lungimea maximă a șirului de caractere. Atunci când este specificată o valoare de tip șir de caractere aceasta trebuie să fie scrisă între două apostrofuri;

șiruri de caractere pe biți pot avea lungime fixă BIT (n) sau variabilă BIT VARYING (n) , se scriu la fel ca și caracterele, între apostrofuri, difereneța este că sunt precedate de litera „B”;

tipul boolean ia una din valorile TRUE sau FALSE;

tipul data (DATE) care este format dintr-un șir de 10 caractere ale cărui componente sunt anul, luna și ziua în formatul „YYYY-MM-DD”. Tipul TIME are în schimb opt poziții în formatul „HH:MM:SS”, componentele acestuia fiind oră, minut și secundă;

tipul timestamp conține câmpuri de tipul DATE și TIME dar conține în plus minim șase poziții pentru fracții zecimale și un câmp opțional „WITH TIME ZONE” ex „2008-09-27 09:12:47.648302”.

3.5 Bazele de date SQLite

SQLite este un SGBD cu cod sursă deschis ce folosește aceeși sintaxa SQL ca și bazele de date relaționale standard. De asemenea SQLite suportă tipurile de date TEXT – similar cu tipul String în Java , tipul INTEGER – similar tipului long în Java sau tipul REAL -similar tipului double din limbajul Java.

3.5.1 SQLite în Android

SQLite este integrat în orice dispozitiv Android. Pentru a putea folosi SQLite înr-o aplicație Android nu este necesară nicio altă librărie în plus. Este suficientă scrierea comenzilor SQL pentru crearea și modificarea unei baze de date.

Accesarea bazei de date presupune și accesarea fișierelor din dispozitiv, această operație poate dura o perioadă, de aceea este recomandat ca la inserarea sau încărcarea datelor dintr-o bază de date să se folosească clasa AsyncTask (descrisă în capitolul 2.4). Dacă aplicația crează o bază de date aceasta se va găsi în directorul DATA/nume_pachet_apicatie/numebazaDeDate. DATA reprezintă direcrotul care este returnat de metoda Environment.getDataDirectory(), nume_pachet_aplicatie este principalul pachet al aplicației, iar numebazaDeDate este numele bazei de date care a fost creată.

3.5.2 Lucrul cu baze de date în Android

Clasele necesare lucrului cu baze de date se gasesc în pachetul android.database.sqlite.

Pentru a crea sau a modifica o bază de date într-o aplicație Android este necesară extinderea clasei SQLiteOpenHelper, iar în constructorul acesteia se va apela metoda super(), specificându-se numele bazei de date și versiunea curentă acesteia.

În acest caz este necesară suprascrierea metodelor onCreate() care va fi apelată automat dacă baza de date este accesată dar nu a fost creată încă, și metoda onUpgrade () apelată atunci când există o nouă versiune a bazei de date în aplicație. Aceasta metodă permite înlocuirea bazei de date creată prin metoda onCreate(). Ambele metode primesc ca parametru un obiect SQLiteDatabase, acesta fiind reprezentarea în Java a unei baze de date.

Clasa SQLiteOpenHelper dispune de metodele getReadableDatabase() și getWritableDatabase() pentru a accesa o bază de date diferit, dacă se poate doar citi din aceasta sau se poate și modifica.

Principala clasă pentru a lucra cu baze de date SQLite în Android este SQLiteDatabase, aceasta dispune de metode pentru a deschide o bază de date, a insera , a modifica sau a șterge dintr-o baza de date. În special dispune de insert(),update() și delete(), dar și de metoda execSQL() care permite executarea directă a unei comenzi SQL.

Obiectul ContentValues permite definrea de chei/valori unde cheile reprezintă coloane ale tabelelor, iar valorile sunt conținutul ce va fi inserat în tabel. Obiectele ContentValue pot fi folosite pentru inserarea sau modificarea conținutului unei baze de date.

Comenzile SQL sunt create prin comenzile rawQuery() sau query() ale clasei SQLiteQueryBuilder. Funcția rawQuery() acceptă ca parametru direct o comandă SQL, iar query() are o interfață specifică pentru o comandă SQL.

O comandă SQL executată în Android returnează un obiect de tip Cursor. Pentru a vedea numărul de elemente returnate de Cursor vom folosi metoda getCount(),ceea ce reprezintă numărul de rânduri returnate de comanda SQL.

În momentul finalizării unei comenzi SQL, baza de date trebuie închisă, pentru a putea fi deschisă din nou în momentul unei noi execuții fără să genereze vreo eroare.

Capitolul 4

Limbajul C# și ASP.Net și servicii web

4.1 Microsoft Visual Studio și framewor-ul .NET

Microsoft Visual Studio este un mediu de dezvoltare (IDE) al companiei Microsoft. Acesta este folosit pentru dezvoltarea de programe pe calculatoare care folosesc ca sistem de operare Microsoft Windows, dar și site-uri sau aplicații și servicii web.

Visual Studio suportă mai multe limbaje de programare ce pot fi scrise și editate folosind acest mediu de dezvolare, aici amintim (C, C++, VisualBasic sau C# etc.)

La fel ca oricare mediu de dezvoltare, visual studio include un editor de cod care ajută dezvoltatorul prin completare automată în cazul numelor de funcții sau al variabilelor care se repetă.

Framework-ul .NET este format dintr-o mulțime de clase și librării care facilitează accesul dezvoltatorului la interfața grafică, lucrul în rețea, lucrul cu baze de date, dezvoltarea de aplicații web sau algoritmi numerici. .NET este folosit în majoritatea aplicațiilor noi dezvoltate pe sistemul de operare Microsoft Windows.

Mediul în care sunt rulate aplicațiile dezvoltate în framework-ul .NET este cunoscut sub denumirea Common Language Runtime (CLR), o mașină virtuală ce încapsulează servicii ce permit dezvoltatorului să administreze memoria sau sa folosească un mecanism de tratare al excepțiilor fiind inclus și un "Garbage colector" întâlnit de asemenea și în cazul mașinii virtuale pe care sunt rulate aplicațiile în Java.

4.1.2 Scurt istoric

Prima versiune a Microsoft Visual Studio a fost lansată în anul 1997 sub numele de cod Boston (oraș American). În acel an IDE-ul a fost publicat în două ediții prima dată numite Visual Studio Professional și Visual Studio Enterprise.

Visual Studio 97 a fost prima încercare a celor de la Microsoft de a folosi același mediu de dezvoltare pentru mai multe limbaje de programare. Acesta a fost vândut în ediții separate spre folosirea cu Visual C++, Visual Basic și Visual FoxPro.

În anul 1998 următoarea versiune Microsoft Visual Studio cu nume de cod Aspen (după stațiunea din Colorado) a fost lansat în luna Iunie a acelui an și a fost destinat să ruleze pe platforma Windows 9x ce conține versiunile sistemului de operare Windows dezvoltate de Microsoft între 1995 și 2000. Și de această dată Microsoft lansează Visual Studio în aceleași două ediții.

Patru ani mai târziu, în februarie 2002, Microsoft lansează Visual Studio .NET, versiunea cu nume de cod Rainer. Cea mai mare schimbare adusă acestei versiuni a fost introducerea unui mediu de dezvoltare care folosea arhitectura .NET. De această dată Microsoft vinde noul produs în patru ediții și anume: Academic, Professional, Developer și Enterprise Arhitect. Tot în 2002 Microsoft lansează un nou limbaj de programare și anume C#.

Această versiune a Visual Studio dezvoltă aplicații pentru platforma Windows, dar și aplicații Web (folosind ASP.NET și serviciile web).

Următoarele versiuni ale mediului de dezvoltare au fost lansate în 2005 și 2008. Aceste versiuni au adus mai multe îmbunătățiri IDE-ului, Visual Studio 2008 fiind ultima versiune care suportă Windows 2000 pentru aplicațiile C++. Acesta a fost bazat mai mult pe dezvoltarea de aplicații pentru noua versiune a Microsoft Windows numită Vista, dar și pe dezvoltarea de aplicații web. De asemenea versiunea lansată în anul 2008 conținea și un editor HTML\CSS cu un design grafic. Tot această versiune integrează lucrul cu baze de date (LINQ) dar și schemele grafice bazate pe XAML, întâlnite și în Eclipse.

Microsoft lansează noi versiuni ale Visual Studio în 2010 cu Visual Studio Ultimate, în 2012 și 2013 lansează Microsoft Visual Studio 2012 respectiv Microsoft Visual Studio 2013. Ultima versiune a Visual Studio lansată de Microsoft este Visual Studio 2015 și a fost lansat pe 3 iunie 2014.

4.2 Limbajul C#

C# este un limbaj orientat obiect, construit special pentru dezvoltarea de aplicații în framework-ul .NET de la Microsoft. Acest framework conține un mediu de rulare și mai multe librări care furnizează o platformă de dezvoltare bogată. Rădăcinile limbajului provin din familia limbajelor de programare C, fiind asemanător C++ și Java.

Multe caracteristici ale limbajului C# au fost construite având la baza slăbiciuni și puncte forte ale altor limbaje de programare, în mod particular Java și C++. Specificațiile limbajului C# au fost scrise de Anders Hejlsberg și Scott Wiltamuth. Anders Hejlsberg este cunoscut în domeniul programării pentru crearea Turbo Pascal, dar și pentru faptul că a stat la conducerea dezvoltării Delphi.

C# a apărut în prima versiune în anul 2001, cea de-a doua versiune apărând în anul 2005 cu câteva îmbunătățiri aduse limbajului. În anul 2008 Microsoft lansează cea de-a treia versiune a C# împreună cu prima versiune de Visual Studio cu și mai multe plusuri decât versiunile anterioare, adăugând integrarea cu bazele de date (LINQ). C# versiunea 4.0 vine cu avantajele aduse de framework-ul .NET, și acesta fiind tot la versiunea 4.0, aducând o mulțime de clase și librării noi. De asemenea a fost adăugat suportul pentru servicii web, făcând posibilă utilizarea protocoalelor REST și SOAP.

Limbajul de programare C# conține de asemenea unele instrumente întâlnite și la alte limbaje de programare, amintim un "colector de gunoaie" care eliberează automat memoria în cazul obiectelor ce nu mai sunt folosite sau un sistem de tratare a excepțiilor ce permite tratarea anumitor erori.

4.3 ASP.NET

ASP.NET este o platformă cu cu cod sursă deschis dezvoltat pentru aplicațiile Web pentru a crea pagini dinamice. A fost dezvoltată de Microsoft pentru a permite programatorilor să dezvolte aplicații web, site-uri web dinamice dar și servicii web. ASP.NET fost lansat în prima sa versiune în anul 2002 ca o componentă a framework-ultui .NET.

Aplicațiile ASP.NET pot fi scrise în orice limbaj care poate fi rulat pe mașina virtuală Common Language Runtime, incluzând aici Visual Basic sau C#.

Pentru a crea aplicații web în ASP.NET se folosește Visual Studio. Instrumentele IDE-ului permit dezvoltarea de aplicații web folosind ASP.NET.

Aplicațiile web dezvoltate cu ASP.NET sunt rulate de către framework-ului .NET, și nu de către sistemul de operare, ca în cazul aplicațiilor Windows.

Pentru a publica aplicațiile dezvoltate cu ASP.NET este destul copierea unor fișiere pe un server, pentru asta fiind însă necesară instalarea serverului web oferit de Microsoft și anume Internet Infromation Services (IIS), cu ajutorul căruia aplicațiile ASP.NET vor putea fi folosite de către utilizator.

ASP.NET și framework-ul .NET au parcurs un drum lung împreună, de la prima lansare ASP.NET în versiunea 1.0 venind cu puține modificări în versiunea 1.1 pentru că versiunea 2.0 lansată în anul 2005 să aducă o mulțime de funcționalități noi printre care diferite teme și skin-uri, o pagină principală în dezvoltarea site-urilor și altele.

Formele web ale ASP.NET permit crearea de aplicații web asemănătoare celor windows, asta însemnând că fiecare pagină nou creată dispune de două fișiere

o interfața grafică în care va fi descris aspectul paginii web și care va avea extensia .aspx.

codul din spatele fișierului include codul unde sunt dezvoltate event-urile prin care utilizatorul interacționează cu aplicația, extensia acestui fișier este de regulă aspx.cs dacă programul a fost scris în limbajul C#.

4.4 Servicii web cu ASP.NET

Un serviciu web este o metodă prin care două dispozitive (computere, computer și dispozitiv mobil, etc.) comunică între ele printr-o conexiune bazată pe o rețea.

Termenul de serviciu web este o descriere standardizată a aplicațiilor web care folosesc XML,WSDL și SOAP pe un protocol HTTP sau HTTPS.

XML-ul este folosit pentru a scrie datele sub forma unor tag-uri și tipul acestora, întregi, siruri de caractere, sau numere reale. De asemenea tag-urile XML descriu vectori și structuri.

SOAP sau Simple Object Access Proocol este o parte esențială a serviciilor web. SOAP-ul nu încearcă să construiască o interfață complet nouă, încercând să fie cât mai simplu de folosit. Ca un exemplu securitatea este o problemă importantă a serviciilor web, dar SOAP-ul nu face referire la ea, bazându-se pe securitatea meacnismului HTTP.SOAP-ul folosește de asemenea scheme XML

WSDL (Web Service Description Language) construit de IBM împreună cu Ariba și Microsoft. Un document WSDL este un document care descrie metodele web ale unui serviciu, incluzând detalii despre parametrii și despre răspunsul trimis de către serverul web. De asemenea documentul WSDL descrie protocolul suportat de serviciul web (SOAP, HTTP-GET sau HTTP-POST) și specifică adresa la care se află serviciul web. În ASP.NET dezvoltatorul nu trebuie să se preocupe de documentul WSDL, acesta fiind creat automat.

UDDI (Universal Description, Discovery and Integration) este o inițiativă a industriei de a crea un registru global al serviciilor web. UDDI un registru central al serviciilor web, ocupându-se și de specificarea structurii registrilor și specificarea API-urilor (Application Programming Intergace sau Interfete pentru programarea de aplicații).

Spre deosebire de aplicațiile web sau site-urile web, serviciile web nu au o parte care să conțină interfața grafică. În schimb serviciile web trimit date prin intermediul unei rețele. Informațiile preluate dintr-un serviciu web pot fi apoi îmbinate cu o interfață grafică (cazul dispozitivelor mobile) pentru a oferi noi funcțonalități utilizatorlui. Serviciile web nu necesită folosirea uni browser sau a HTML-ului.

Serviciile web folosesc mai multe protocoale și standarde :

HTTP : Internetul este bazat pe Hypertext Transfer Protocol (HTTP) combinat cu HTML. HTTP-ul este un protocol de cerere/răspuns constuit pe TCP/IP (Protocol de control al transmisiei/Protocol Internet). Un client HTTP stabilește o conexiune TCP cu un server și trimite o cerere HTTP. Cererea conține metoda HTTP, care poate fi GET sau POST. GET este folosită pentru a primi fișiere cum ar fi o pagină HTML de la server. Pentru a trimite date în cerere se va folosi un POST. Răspunsul conține datele returnate. Protocolul HTTP este simplu și folosește text atât pentru cerere cât și pentru răspuns.

XML și schemele XML: Extensible Markup Language (XML) este cheia serviciilor web. SOAP,WSDL și UDDI sunt toate bazate pe XML. SOAP-ul folosește XML pentru a transfera datele între dispozitive. WSDL folosește XML pentru a descrie structura serviciului web.

ASP.NET suportă trei protocoale pentru apelarea serviciilor web

HTTP-GET

HTTP-POST

SOAP

În fiecare dintre cele trei cazuri datele sunt trimise printr-o cerere HTTP și returnate printr-un răspuns HTTP ca în figura Fig 2.

Fig 2

Cu HTTP-GET și HTTP-POST parametrii sunt trimiși în formatul cheie/valoare. HTTP-GET trimite parametrii în URL-ul transmis către server, în timp ce HTTP-POST trimite parametrii într-un mesaj-cerința HTTP. În ambele cazuri răspunsul este primit în format XML. SOAP folosește XML atât pentru trimiterea cererii cât și pentru trimiterea răspunsului.

Ținând cont de faptul că în cazul serviciilor web parametrii pot fi trimiși doar în perechi cheie/valoare, HTTP-GET și HTTP-POST sunt mult mai limitate decât SOAP.

Un serviciu web creat în ASP.NET poate folosi orice tip de protocol.

Pentru a apela un serviciu web este necesară invocarea metodelor de pe serviciu. Pentru a putea face acest lucru este necesar să știm ce parametrii suportă metoda respectivă, ce parametrii sunt trimiși metodei web și ce returnează aceasta.

4.4.1 Crearea unui serviciu web cu ASP.NET

În ASP.NET setările fiecărei aplicații se regăsesc în două locuri, obiectul Application și fișierul web.config. Obiectul Aplicație este un dicționar în care sunt stocate perechi de chei și valori. În ASP.NET setările de configurare se găsesc în fișierul web.config. Acest fișier este în directorul principal al aplicației și poate fi folosit pentru a configura mai multe aspecte ale aplicațiilor web, spre exemplu, aici se va găsi legătura cu baza de date. Fișierul web.config conține de asmenea mai multe secțiuni, incluzând una pentru autentificare, una pentru securitate sau pentru tratarea excepțiilor.

Pentru a crea o pagină care conține un serviciu web în ASP.NET avem nevoie de următoarele :

un fișier a cărui extensie este .asmx

o directivă WebService în partea de sus a paginii

atributul WebMethod pentru metodele ce vor fi expuse (exemplu figura Fig 3)

Fig. 3

Capitolul 5

Aplicația de asigurări „ProAsigurări” dezvoltată în Android.

Aplicația „ProAsigurari” dezvoltată pentru realizarea lucrării este o aplicație Android în Java. Mediul de dezvoltare folosit este Eclipse. Aplicația poate fi testată pe orice dispozitiv pe care rulează sistemul de operare Android, începând cu versiunea 2.2 a acestuia, și până la ultima versiune disponibilă.

Scopul aplicației este de a face mai ușoară căutarea de tarife pentru o asigurare obligatorie pentru autovehicul, o asigurare de locuință sau o asigurare de călătorie de pe un dispozitiv mobil. De asemenea utilizatorul își poate seta anumite alerte în urma cărora aplicația îl anunță printr-un sistem de „Push notifications” atunci când îi expiră o poliță de asigurare pentru mașina sau locuință. Un alt scop al aplicației este acela de a verifica asigurarea obligatorie a unui autovehicul prin căutarea după numărul de înmatriculare sau după seria de șasiu a acesteia. Odată salvate în telefon, datele personale, necesare fiecărui calculator de tarife, vor fi salvate în dispozitivul mobil, fără a mai fi nevoie să fie introduse din nou pentru o nouă calculație. De asemenea dacă aplicația a fost ștearsă de pe un dispozitiv, la o nouă instalare datele pot fi recuperate. Orice comandă efectuată va fi și ea salvată în baza de date a dispozitivului mobil.

Baza de date locală a aplicației, este formată dintr-un fișier al cărui extensie este .sqlite și care conține cinci tabele :

Tabela CodCaen în care se găsesc codurile CAEN specifice firmelor, tabela conține două coloane, pe prima se află codul unic format dintr-un număr, iar pe cea de-a doua coloană sunt detaliile despre fiecare cod.

Tabela ObiectAsigurat în care se găsesc obiectele salvate de utilizator (persoane, autovehicule, locuințe). Prima coloană a tabelei denumită IdIntern va conține un id unic al fiecărui obiect, a doua coloană numită TipObiect, va avea o cifră (1-persoană, 2-autovehicul, 3-locuință), iar coloana a treia numită JSONText va conține un obiect JSON cu detalii despre fiecare obiect salvat.

Tabela județe conține pe prima coloană un număr reprezentând un cod al fiecărui județ, iar a doua coloană va conține numele fiecărui județ.

Tabela localități conține pe prima coloană codul localității, pe a doua coloană codul județului din care face parte, iar pe a treia coloană numele fiecărei localități.

Tabela vehicule_marci, este o tabelă formată din două coloane, prima conține id-ul fiecărei mărci, iar cea de-a doua numele unei mărci de autovehicul

5.1 Descrierea aplicației

La deschidere, aplicația afișează un ecran în activitatea SpalshScreen.java care este afișat timp de o secundă. În fundalul acestui ecran se verifică dacă aplicația a mai fost deschisă printr-o funcție care aparține clasei AppSettings.java, clasa ce implementează SharedPreferences (un sistem prin care pot fi salvate date în memoria telefonului la anumite chei, fără a folosi baze de date ex Fig 4). Mai exact, funcția getDeviceId() verifică dacă există vreun șir de caractere salvat pentru cheia "DeviceId", în caz contrar se salveaza codul unic al dispozitivului mobil la cheia respectivă. Este posibil ca dispozitivul să nu aibă cod unic, caz în care aplicația genereaza unul aleator format din mai multe cifre și litere.Tot în fundal se realizează conexiunea la baza de date salvată în dispozitivul mobil, încărcându-se în memorie datele care au fost salvate anterior în baza de date. Aplicația trece la următoarea activitate datorită unui obiect de tip Handler în interiorul căruia se crează un obiect Intent, obiect ce ajută la navigarea între activități și cu care se trece la următorul ecran după o secundă, timp suficient pentru ca aplicația să execute tot ce este necesar rulării optime ulterioare.

Fig. 4

Următorul ecran conține o pagină principală a aplicației, formată din bara de sus pe fundal negru unde va afișa pentru fiecare ecran titlul acestuia și care conține un buton în partea din stanga pentru a ajunge în meniul principal (Fig 5). Butonul, deschide un meniu format din alte patru butoane (Fig 6), fiecare ducând spre un grup de activități, o clasă extinsă din clasa ActivityGroup. În centrul ecranului se află trei butoane cu un fundal sugestiv, fiecare crează un obiect de tip Intent spre o alta activitate reprezentând introducerea datelor pentru efectuarea unui calcul al unei asigurări.

Fig 5 Fig 6

Primul buton al meniului principal, butonul „Asigurări”, ne va duce pe același ecran de unde ne putem alege calculatorul, în timp ce selectând al doilea buton din meniu, butonul „Datele Mele” vom ajunge într-un alt grup de activități. Aici va fi afișată o listă creată dinamic. În fișierul datele_mele.xml, corespondent activității DateleMele.java avem un element de tip ListView. Acesta este populat cu ajutorul unei clase extinse a clasei SimpleCursorAdapter, clasă ce permite crearea de elemente pentru o listă. Fiecare element al listei poate fi un alt fișier xml trimis ca parametru la crearea unui obiect al clasei. În acest fel în funcție de poziția elementului în listă, putem seta imaginea și textul afișat. În cazul în care există date salvate în baza de date a telefonului, acestea vor fi afișate în lista (Fig 9) respectiv pe prima poziție numele și prenumele deținătorului contului, dacă acesta a fost înregistrat, pe următoarele trei linii numărul de mașini, numărul de locuințe și numărul de persoane salvate. Ultimul element al listei fiind o legătură către lista de comenzi efectuate.

Primul element din listă duce spre un formular de completare al datelor personale. Fiecare obiect de tip persoană are ca atribute importante:

id, notat idIntern, este generat aleator de către aplicație, fiind format dintr-un șir de litere si numere (la fel ca în cazul dispozitivelor al caror id unic este null)

nume, codUnic (codul numeric personal sau codul de identificare al firmei), județ, localitate, adresa, tipPersoana (poate fi fizica sau juridica)

În momentul salvării, datele sunt salvate în baza de date locală a telefonului. Fiecare obiect de tip persoană este transformat intr-un obiect de tip JSONObject (Fig 7), care la rândul sau este transformat intr-un sir de caractere pentru a putea fi salvat in baza de date. Salvarea in baza de date se face printr-o funcție a clasei DataBaseConnector.java. Fiecărei coloane i se atribuie o valoare ce va fi salvată ulterior (Fig 8).

Fig 7

Datele sunt trimise de asemenea printr-un serviciu web, apelat printr-o funcție AssyncTask din clasa CreateAccountWebService.java pentru a fi salvate online. Pentru aceasta se creaza un șir de caractere sun forma unui xml ce este trimis ca parametru prin intermediul metodei serviciului web.

Fig 8

Dacă este selectat butonul firma mea din activitatea curentă (Fig 10), și se va introduce în locul pentru codul unic de identificare al firmei (CUI) un CUI corect, se va apela un alt serviciu web care va face o căutare a datelor firmei respective, returnând denumirea și adresa acesteia.

Fig 9 Fig 10

La selectarea câmpului „JUDET, LOCALITATE” se va executa o comandă asupra bazei de date și se vor încarca toate județele din aceasta într-o lista din activitatea Lista.java, în momentul alegerii unui județ, lista va fi încarcată din nou din baza de date cu localitățile ce aparțin județului respectiv (Fig 11). În momentul selectării uneia dintre localități, aceasta va fi salvată și afișată împreună cu județul în câmpul „JUDET, LOCALITATE”. Utilizarea bazei de date se face de către clasa DatabaseConnector.java.

Cel de-al doilea element al listei din figura Fig 9, „MASINILE MELE”, este un buton de legatură cu lista tuturor mașinilor salvate în memoria telefonului. Dacă apăsăm butonul „Adauga masina” se va crea un obiect nou de tip Autovehicul și se va deschide formularul de adaugăre, dacă există deja la selectarea unui element din lista alăturată în același format ca lista din ecranul anterior, va fi afișat același formular ca la completare doar că vor fi afișate date în câmpurile în care acestea au fost introduse anterior. Cele mai importante atribute ale obiectului de tip autovehicul sunt:

idIntern care la fel ca în cazul obiectelor de tip persoană este generat aleator si e format dintr-un șir de caractere

marca, model, serieSasiu, nrInmatriculare, serieCiv, destinatieAuto sunt șiruri de caractere ce vor fi salvate din formular

nrLocuri, putere, masaMaxima, anFabricatie sunt numere de tip int ce vor fi salvate tot in urma completării formularului

atributul inLeasing de tip boolean

Marca autovehiculului se va alege dintr-o listă extrasă din baza de date printr-o funcție asemănătoare cu cea din Fig 11, singura diferență fiind comanda sql executată : „select Nume from vehicule_marci”. Majoritatea datelor ce trebuiesc trecute vor fi trecute din tastatura virtuală a dispozitivului mobil, fiind afișat și un text în partea de sus a ecranului dispozitivului care ajută utilizatorul la completarea câmpurilor.

Fig 11

În cazul selectării tipului de autovehicul, al combustibilului sau al scopului în care este folosit autovehiculul, este afișat un widget Android numit RadioGroup (Fig 12), format din trei butoane de tip RadioButton (butoane ce permit utilizatorului să aleagă doar una din opțiunile afișate) customizate și un altul care afișează într-o altă activitate nouă numită RadioButtons.java mai multe butoane RadioButton customizate (Fig 13). Deoarece Android-ul permite afișarea butoanelor radio doar în linie într-un grup RadioGroup, a fost necesară crearea mai multor grupuri de căte trei butoane care lucrează în paralel (aplicația verifică în momentul selectării unuia dintre butoane, ca niciun buton din celelalte grupuri să nu fie selectat, iar dacă este selectat îl deselectează) pentru a fi afișate toate opțiunile de selecție.

Fig 12 Fig 13

Un alt widget Android folosit în acest ecran, al cărui corespondent xml este fișierul info_masina.xml este un buton de tip ToggleButton (buton care poate avea două statusuri, iar în momentul selectării își schimbă statusul). Rândul „AUTO IN LEASING?” are în dreapta sa un astfel de widget cu opțiunile „DA” și „NU”. Dacă butonul este selectat se va afișa un nou rand în care se va introduce numele firmei de leasing, în caz contrar rândul va fi ascuns. La apasarea butonului se va modifica valoarea de adevar a atributului inLeasing.

La apasarea butonului „Salveaza”, datele introduse în formular vor fi salvate în baza de date a telefonului, apelându-se de asemenea și un serviciu web din clasa RegisterMasinaWebService.java prin care datele sunt trimise și salvate în baza de date de pe server. Salvarea in baza locala a dispozitivului se va face tot prin intermediul unui obiect de tip JSONObject, ca in cazul obiectelor de tip persoana.

Pentru ștergerea unei înregistrări din lista de autovehicule, este folosit un event de tipul „OnItemLongClickListener”, care înregistrează apăsarea lungă pe unul din elementele listei în clasa MasinileMele.java. În acel moment este afișată o alertă de tip „Dialog” pentru confirmarea de stergere a inregistrării (Fig 14). Dacă utilizatorul confirmă ștergerea unei înregistrări, atunci aceasta este stearsă din baza de date locală, dar este făcut și un apel către un serviciu web care marchează înregistrarea ca stearsă din baza de date (Fig 15 – Crearea unei alerte „Dialog”, ștergerea din baza de date locală și apelarea serviciului web „DeleteMasinaWebService”).

Fig 14 Fig 15

La selectarea butonului „Alerte” din figura Fig 12 se deschide activitatea AlerteMasina.java (Fig 16) care va afișa o listă de unde se vor putea seta alerte pentru data de expirare a unei polițe, data de expirare a inspecției tehnice a mașinii, sau data la care trebuie platită o rată Casco.

În urma salvării unei date pentru o alertă utilizatorul va fi anunțat printr-un sistem „Push notifications” când a fost activată una din alertele selectate. Alertele vor fi salvate atât în baza de date locală, cât și în cea de pe server în urma unui apel către un serviciu web.

La selectarea unui rând din lista de alerte se va deschide un pop-up care va conține un widget Android numit „DatePicker”, acesta fiind o opțiune de selectare a unei date calendaristice (Fig 17).

Pentru următoarele trei elemente ale listei, widget-urile folosite sunt aceleași ca cele descrise până acum. Al treilea element crează un Intent spre locuințele salvate iar la deschiderea unei locuințe se completează un formular cu date despre locuință, în timp ce al patrulea element afișează lista persoanelor salvate.

Obiectul locuință are ca principale atribute :

idIntern

tipLocuinta (care poate avea valorile : „Casă-vilă comună”,„Casă-vila individuală” sau „Apartament-în-bloc”)

structuraLocuinta, valoare de tip String

regimInaltime, etaj, anConstructie, suprafataUtila, nrLocatari valori de tip int

mai multe valori de tip String ce iau valoarea „da” sau „nu” ce reprezinta alte caracteristici ale obiectului locuință (locuitPermanent, areAlarma,areTeren etc.).

Ca și în cazul persoanelor si al autovehiculelor, obiectele de tip locuință sunt salvate in tabela ObiectAsigurat din baza de date a dispozitivului, informațiile fiind trimise de asemenea și printr-un serviciu web.

Fig 16 Fig 17

Activitatea principală a aplicației, care funcționează sub forma unui „master page” al unei pagini web, în care sunt afișate toate activitățile construite ulterior se afla în clasa MainController.java, cu corespondentul în resurse activity_menu.xml.

După închiderea activității SplashScreen, următoarea activitate deschisă este MainController. În funcția onCreate() din MainController se verifică dacă a fost memorat id-ul de înregistrare pentru trimiterea de notificări Push, în caz contrar se crează unul (Fig 18).

Fig 18

Clasa GCMRegistar aparține unei librării google folosită pentru implementarea funcției de notificări push din pachetul com.google.gcm.GCMRegistar ce trebuie importat în antetul clasei pentru a putea fi folosit.

Tot în clasa MainController.java, butonul de sincronizare care apare în bara de sus sub forma unui norișor, a meniului principal atunci când este deschis (Fig 6) are setat ca event în cazul în care este apăsat, apelarea unui serviciu web care duce la recuperarea datelor dacă aplicația a mai fost folosită pe același dispozitiv. Clasa privată RecupereazaDateWebServices, care extinde clasa AssyncTask apelează o metodă a unui serviciu web ce returnează un set de date. Rezultatul apelului este returnat sub forma unui document xml.

Pentru parsarea textului xml returnat prin apelarea serviciului web, este necesara folosirea unui SAXParser (Fig 19 – descris în capitolul 2.4.6).

Fig 19

La fel ca în cazul apelului, parsarea se face în fundal, mai exact în funcția doInBackground() a clasei AssyncTask.

Rezultatul dintre tag-urile xml, fiind un set mare de date, este în format JSON (capitolul 2.4.7). Pentru parsarea textului de aici, aplicația folosește un JSONArray pentru datele care sunt sub forma unui șir, și JSONObject pentru a obține datele fiecărui obiect (Fig 20). Odată parsate, acestea sunt salvate în baza locală a dispozitivului mobil.

Fig 20

Primul buton al meniului principal din clasa MainController.java ce extinde clasa ActivityGroup, duce spre ecranul unde sunt afișate cele trei butoane către calculatorul de tarife de asigurare.

Primul buton din acest ecran, butonul RCA, crează un obiect de tip Intent ce deschide activitatea AsigurareRca.java, cu corespondentul asigurare_rca.xml (Fig 21). Primul rând afișat permite utilizatorului selectarea unui obiect de tip Autovehicul necesar calculației. În momentul alegerii din listă a mașinii, funcția isValidForRca() din clasa Autovehicul verifică dacă datele autovehiculului selectat sunt complete (au fost alese județul și localitatea, au fost completate câmpurile cu capacitatea cilindrică, puterea și masa maximă a autovehiculului, seria de șasiu este cuprinsă între zece și șaptesprezece caractere etc.). La fel și în cazul alegerii unei persoane, în clasa persoană funcția isValidForCompute() verifică dacă obiectul persoană selectat are datele necesare completate și dacă acestea sunt corecte.

Câmpul selectează data de început este un widget de tip TextView, în care butoanele „+” și „-” au implementate event-uri custom ce permit setarea unei date minime de început la o zi după ziua curentă, în timp ce data maximă poate depași cu o lună data curentă. Aceste butoane sunt întâlnite și în formularul de completare a datelor pentru o locuință în dreptul numărului de camere și numărului de locatari (Fig 22).

La selectarea rândului informații pentru reduceri se crează un intent spre activitatea Reduceri.java (Fig 23) unde se folosește un alt tip de widget pentru butoanele „Casatorit”, „Copii minori”, „Pensionar” sau „Handicap locomotor” și anume CheckBox (buton asemănător cu cel de tip RadioButton doar ca în acest caz pot fi selectate mai multe opțiuni). Pentru rândurile următoare este folosit același widget întâlnit și la selectarea datei de început a poliței, butoanele „+” și „-”. În cazul anului de permis, anul minim este setat în funcție de codul numeric personal introdus.

Fig 22 Fig 23

Dacă persoana aleasă este persoană juridică, câmpul informații pentru reduceri este ascuns, iar în locul acestuia apare câmpul de alegere a codului CAEN (indică ocupația unei persoane juridice). Codurile CAEN împreună cu explicații, sunt încărcate din baza de data locală, la fel ca în cazul județelor și al mărcilor auto.

La apăsarea butonului calculează din AsigurareRca este creat un Intent spre activitatea CallWebServiceRca.java (Fig 24) unde este apelată o metodă a unui serviciu web ce returnează tarifele pentru o calculație.

Fig 24

Metodele sunt apelate automat în funcția onCreate() a clasei CallWebServiceRca.java ce extinde clasa Activity. Tot aici se crează un obiect de tip Handler care verifică la fiecare 400 de milisecunde dacă au fost obținute tarifele (a fost făcut apelul către serviciul web și rezultatul a fost parsat ca în cazul clasei RecupereazaDateWebSercvice) în caz contrar se modifică imaginea al carei id este R.id.loading_img pentru a crea senzația unei animații (Fig 25).

Fig 25

În momentul în care parsarea textului a fost finalizată se trece la următorul ecran, cel în care sunt afișate tarifele, astfel este creată dinamic o listă, într-un element xml de tip ListView în care sunt afișate compania de asigurare și tariful. În cazul selectării butonului de „12 luni” lista este reîncarcată cu tarifele pentru 12 luni de asigurare. Fiecare element din listă are un id care va fi trimis printr-un serviciu web în momentul în care utilizatorul finalizează comanda. La alegerea unuia dintre tarifele afișate, fiind setat un event de tip OnItemClickListener pe listă se va crea un Intent spre următorul ecran în care se vor afișa datele personale și tariful ales de către utilizator. Ultimul ecran al acestui grup de activități este cel de finalizare a comenzii. Aici se vor trece alte date personale necesare (Adresa și Telefonul pentru confirmare și se va alege modalitatea de plată). Dacă modalitatea de plată nu este cu cardul, procesul va fi finalizat printr-un alt apel al unei metode a unui serviciu web. Astfel în funcția onPreExecute() se va afișa un ProcessDialog în functia doInBackground() se va face apelul așa cum, iar în interiorul metodei onPostExecute() se va analiza răspunsul, afișându-se un mesaj corespunzător în cazul în care apelul a fost făcut cu succes sau s-a produs o eroare.

Cele trei butoane de pe penultimul rând al tabelului afișat, în care se poate alege modalitatea de plată sunt butoanele de tip RadioButton întâlnite și în alte scheme xml. Dacă modalitatea de plată aleasă a fost „Cu cardul”, la apăsarea butonului „COMANDA”, dacă apelul metodei web a fost făcut cu succes, se va deschide o pagina în browser-ul telefonului pentru a putea efectua plata cu cardul. Pagina deschisă este o pagină securizată a unui procesator de plați.

După ce comanda a fost finalizata, aceasta va putea fi gasita în „Comenzile mele” din grupul „DateleMele”.

În cazul calculatorului pentru asigurarea de locuința (Fig 26), calculul se face asemanator cu cel pentru asigurarea RCA, diferența fiind la afișarea tarifelor unde se vor primi mai multe informații, iar în ecranul în care se afișează sumarul datelor și al tarifului selectat vor exista două butoane, „Sumar acoperiri” și „Sumar conditii complete” (Fig 27).

Fig 26 Fig 27

Primul buton va deschide o alta activitate al cărui corespondent în directorul de resurse este un widget de tip webview unde poate fi încărcat un url către o pagină web, sau un text în format HTML. Pagina deschisă de butonul „Sumar acoperiri” va încărca în webview un text HTML care este automat formatat de către acest widget. În cazul butonului „Sumar condiții complete” se va deschide aceași activiate, doar că de această dată se va încărca un url către un document pdf. WebView-ul nu permite deschiderea unui document în format pdf, de aceea este necesară folosirea unui instrument oferit de Google și anume Google-Docs Viewer, instrument ce permite deschiderea documentelor .pdf sau .doc într-o pagina web. Pentru aceasta este necesar ca înaintea url-ului trimis să se completeze cu „http://docs.google.com/gview?embedded=true&url=” urmat de url-ul către documentul .pdf (Fig 28).

Fig 28

În cazul celui de-al treilea buton care crează un obiect Intent spre calculatorul de asigurare de călatorie (Fig 29) există de asemenea un widget de tip RadioGroup folosit pentru primul și penultimul rând, un rând pentru alegerea numărului de zile cu cele doua butoane „+” și „-” unde maximul este 365 și minimul este 2 și unul identic cu cel întâlnit la calculatorul pentru asigurarea rca de selectare a datei de început, un alt rand care încarcă o listă a țărilor ce pot fi selectate (de aceasta dată nu este folosită baza de date). Pentru al treilea rând din tabel este folosit un buton de tip ToggleButton.

Spre deosebire de celalte două calculatoare descrise până acum, pot fi alese mai multe persoane pentru a se efectua o calculație pentru un tarif de asigurare. În momentul selectării a uneia din persoanele din listă, dacă obiectul selectat este valid pentru calculație se va deschide o altă activitate cu mai multe butoane de tip CheckBox, iar persoana respectivă va fi adaugată în lista de persoane asigurate.

Fig 29

Pentru apelarea serviciului web ce calculează tarifele de asigurare va trebui trimisă lista de persoane într-un format JSONArray. De data aceasta șirul de obiecte este creat dintr-un StringBuilder, făra a folosi vreuna din librăriile ajutătoare oferite de Java (Fig 30).

Fig 30

Funcția „append” a clasei StringBuilder concatenează șirul de caractere deja existent cu șirul de caractere trimis ca parametru. După ce apelul către metoda web a fost făcut, utilizatorul alege un tarif de asigurare, de această dată are mai multe opțiuni în funcție de suma asigurată, iar ecranul în care este prezentat un sumar cu datele personale și tariful ales este asemănator celui de asigurare de locuința, cu butoanele „Sumar acoperiri” și „Sumar conditii complete” (Fig 27). La finalizarea comenzii plata poate fi făcută doar prin card bancar spre deosebire de celelalte două calculatoare.

Revenind la meniul principal, al treilea buton, butonul de „VeziAlerte”, deschide de această data o singură activitate și nu un grup așa cum se întâmplă pentru celelalte butoane. În acest ecran sunt afișate toate alertele setate de către utilizator, cu detalii despre fiecare. Alertele sunt afișate într-un widget de tip ListView, fiecare element al listei fiind customizat cu o imagine sugestivă în stanga și explicații pe fiecare rând (Fig 31).

Al patrulea buton al meniului principal, butonul „Alte Informatii” deschide o altă clasă ce extinde ActivityGroup și unde găsim o listă cu două elemente.

La selectarea primului element al listei (și aici o listă de tip ListView cu elemente customizate și cu un event OnItemClickListener) se deschide o nouă activitate asemănătoare celor întâlnite în cazul calculatoarelor de asigurare (Fig 32). Aici este necesară selectarea unui obiect de tip autovehicul din lista încărcată din baza de date care să aibă completat corect unul din atributele număr de înmatriculare sau serie de șasiu.

Fig 31

După selectarea obiectului autovehicul, la apăsarea butonului „Verifica RCA” se execută un apel către un serviciu web ce verifică într-o bază de date dacă mașina cu numărul de înmatriculare sau seria de șasiu trimise este asigurat RCA, serviciul web returnează compania la care autovehiculul este asigurat și data în care polița de asigurare va expira. Din nou este necesară parsarea răspunsului primit în format xml, ulterior fiind afișată o alertă de tip Dialog în care apare răspunsul parsat (Fig 33).

Fig 32 Fig 33

Al doilea element al listei deschide o nouă pagina cu un widget de tip ListView customizat unde utilizatorul poate vedea datele de contact (Fig 34).

Fig 34

Dacă utilizatorul selectează email-ul, aplicația va crea un obiect de tip Intent care de această dată va deschide o altă aplicație prin care utilizatorul poate expedia un e-mail (Fig 35), iar în câmpul „Destinatar” va fi trecută adresa de e-mail din câmpul selectat. În cazul selectarii celui de-al doilea rând, numărul de telefon va fi copiat în clipboard și poate fi lipit în aplicația ce permite inițierea unui apel.

Fig 35

Bibliografie

Frank Ableson, Charlie Collins,Robi Sen „Unlocking Android A Developer's Guide”, United States of America, Editura Managin Publications Co. 2009

Marziah Karch, „ Android for Work Productivity for Professionals”, United States of America, Editura Apress, 2010

Jeff “JavaJeff” Friesen, „Learn Java for Android Development”,,, United States of America, Editura Apress, 2010

Onur Cinar, „ Android Apps with Eclipse”, United States of America, Editura Apress, 2012

W. Frank Ableson, Charlie Collins, Robi Sen, „Unlocking Android: a developer's guide”, United States of America, Editura Manning,2010

Berthold Daum „Professional Eclipse 3 for Java™ Developers”, United States of America, Editura Wyley, 2004

Grant Allen, „Beginning Android 4”, United States of America,Editura Apress, 2011

Clare Churcher „Beginning Database Design”, United States of America, Editura Apress, 2007

Alex Kuznetsov, „Defensive Database Programming with SQL Server”, Editura : Red Gate Books,United Kingdom, 2010

Ramez Elmasri, Shamkant B. Navathe, „Fundamentals of Database Systems (6th Edition)”, Pearson

John Sharp,„ Microsoft® Visual C#® 2010 Step by Step”, Microsoft Press, 2010

Imar Spaanjaars, „Beginning ASP.NET 3.5 In C# and VB”, Editura, Wiley, 2008

www.wikipedia.com – web site de Enciclopedie online 

www.vogella.com – web site de pregatire si suport pentru Android, Java, Eclipse

Bibliografie

Frank Ableson, Charlie Collins,Robi Sen „Unlocking Android A Developer's Guide”, United States of America, Editura Managin Publications Co. 2009

Marziah Karch, „ Android for Work Productivity for Professionals”, United States of America, Editura Apress, 2010

Jeff “JavaJeff” Friesen, „Learn Java for Android Development”,,, United States of America, Editura Apress, 2010

Onur Cinar, „ Android Apps with Eclipse”, United States of America, Editura Apress, 2012

W. Frank Ableson, Charlie Collins, Robi Sen, „Unlocking Android: a developer's guide”, United States of America, Editura Manning,2010

Berthold Daum „Professional Eclipse 3 for Java™ Developers”, United States of America, Editura Wyley, 2004

Grant Allen, „Beginning Android 4”, United States of America,Editura Apress, 2011

Clare Churcher „Beginning Database Design”, United States of America, Editura Apress, 2007

Alex Kuznetsov, „Defensive Database Programming with SQL Server”, Editura : Red Gate Books,United Kingdom, 2010

Ramez Elmasri, Shamkant B. Navathe, „Fundamentals of Database Systems (6th Edition)”, Pearson

John Sharp,„ Microsoft® Visual C#® 2010 Step by Step”, Microsoft Press, 2010

Imar Spaanjaars, „Beginning ASP.NET 3.5 In C# and VB”, Editura, Wiley, 2008

www.wikipedia.com – web site de Enciclopedie online 

www.vogella.com – web site de pregatire si suport pentru Android, Java, Eclipse

Similar Posts