Aplicatie Android Pentru Mijlocele Transportului Public Brasov
Aplicație Android pentru mijlocele
transportului public Brașov
CUPRINS
Cap. 1. INTRODUCERE
Cap. 2. TEHNOLOGII UTILIZATE
2.1 Sistemul de operare Android
2.1.1 Caracteristici si specificații ale sistemului Android
2.1.2 Aplicatiile sistemului Android
2.2 SQLITE
2.2.1 Caracteristici SQLite
2.2.2 Situații în care SQLite funcționează la potențial maxim:
2.2.3 Situații în care alt RDBMS ar merge mai bine
2.3 XML
2.3.1 Avantaje:
2.3.2 Ce este XML
2.3.3 Ce nu este XML
2.4 Adobe Photoshop
2.4.2 Avantaje
2.4.3 Formate fișiere
2.4.4 Ultimele instrumente
Cap. 3 FUNCȚIONALITATEA APLICAȚIEI
3.1 Splash art
3.2 Meniul principal
3.3 Căutare rapidă
3.4 Căutare avansată
3.5 Informații
3.6 Contact
CONCLUZII
BIBLIOGRAFIE
Cap. 1. INTRODUCERE
În ultimii ani, transportul public urban s-a inbunătățit considerabil devenind un factor extrem de important al vieții cotidiene.
Aplicația ANDROID pentru mijloacele transportului public urban Brașov, a fost creată in scopul de a simplifica și a facilita accesul călătorilor la orarul mijloacelor de transport în comun și adaptarea acestora cu noua aplicatie prezentată.
Aplicația afișează toate orele de sosire ale mijloacelor de transport în public în toate stațiile din orasul Brașov, cu ajutorul a două opțiuni de căutare:
Căutare rapidă
Se introduce _ stația x – de plecare și
_stația y de destinație
Aplicația va afișa în ordine cronologică, toate autobuzele care rulează pe traseul respectiv.
Căutare avansată
Format similar cu cel oficial al RATBV. Se selectează linia și stația, iar aplicația va afișa orarul complet al acesteia, dar pe telefonul mobil.
Cap. 2. TEHNOLOGII UTILIZATE
2.1 Sistemul de operare Android
Recent, dispozitivele mobile au fost limitate de sistemele de operare proprii, sisteme care aveau nevoie de unelte de dezvoltare specifice. Telefoanele adesea puneau în prim plan rularea programelor proprii în dezavantajul aplicațiilor scrise de diverși programatori. Acest lucru a introdus o limitare artificială pentru dezvoltatori, aceștia fiind forțați să aștepte apariția echipamentului din ce în ce mai optimizat, pentru dezvoltarea aplicațiilor. În android aplicațiile proprii și cele create de dezvoltatorii independenți sunt realizate folosind aceleași API-uri și sunt executate în același timp. Aceste API-uri oferă acces la hardware-ul telefonului, comunicarea dintre aplicații, înregistrări video și grafică 2D și 3D.
Android deține API-uri puternice, foarte bine documentate, o comunitate de dezvoltatori în continuă crestere și fără costuri adiționale privind crearea și distribuția aplicațiilor. Pe măsură ce smartphone-urile continuă să crească în popularitate, Android oferă o ocazie interesantă pentru crearea de aplicații inovative pentru telefoane, indiferent de cunoștințele dezvoltatorului.
Dezvoltatorii care programau utilizând cod C sau C++ de nivel scăzut, trebuiau să înțeleagă limitările hardware-ul specific pentru care dezvoltau, în general un singur model, sau o serie de telefoane asemănătoare ale acceluiasi producător. După cum tehnologia hardware și accesul la internet mobil au fost dezvoltate, această perspectivă asupra programării a devenit depășită. Platforme precum sistemul de operare Symbian au fost create pentru a oferi programatorilor opțiunea de a lucra pe un hardware mai amplu.
Aceste sisteme au ajuns sa fie un success in incurajarea dezvoltatorilor de aplicații pentru sisteme mobile și să dezvolte aplicații care erau avantajate mai mult de hardware-ul disponibil.
Platformele furnizează acces la hardware-ul dispozitivului, dar tot cer ca dezvoltatorul să scrie un cod C/C++. Aceste impedimente sunt cu atât mai mari pentru aplicațiile care rulează pe diverse implementări hardware, în special cele care se folosesc de un anumit modul, cum ar fi GPS-ul. Cele mai importante progrese în dezvoltarea pe dispozitive mobile a fost introducerea de MID-leți Java. MID-leții sunt rulați într-o mașină virtuala Java, un proces care ignora hardware-ul aflat pe dispozitiv și permite dezvoltatorilor să creeze aplicații pentru o gamă mai largă de modele de telefoane. Din păcate, acest lucru crează niște probleme cu privire la accesul la hardware-ul dispozitivului.
In dezvoltarea aplicațiilor mobile, era considerat normal ca aplicațiile create de producători independenți sa primească acces diferențiat la hardware si grile de execuție, decât aplicațiile proprii scrise de către dezvoltatorul dispozitivului. Astfel, MID- leții Java aveau acces limitat catre hardware si catre grilele de executie.
Introducerea de MiD-leți Java a extins rândurile dezvoltatorilor , dar lipsa accesului la hardware și execuția într-o mașină virtuala a însemnat ca majoritatea aplicațiilor mobile să fie dezvoltate pe desktop-uri normale sau website-uri care nu se folosesc de beneficiile oferite de către un dispozitiv mobil.
Android se plaseaza în noua generație de sisteme de operare mobile dezvoltate special pentru hardware în continuă creștere de putere. Windows Mobile și Apple iPhone asigură un mediu de dezvoltare mai bogat și mai accesibil pentru aplicațiile mobile. Însă, spre deosebire de Android, sunt construite pe sisteme de operare propii care în unele situatii proritizeaza aplicațiile native în detrimentul celor create de terți utilizatori, restricționează transferul de informații între aplicațiile independente și aplicațiile proprii ale dispozitivului și limitează sau controlează distribuția aplicațiilor către platforme.
Android oferă noi posibilități pentru aplicațiile mobile deoarece pun la dispoziție un mediu de dezvoltare deschis construit peste un kernel Linux open source. Accesul la hardware este deschis tuturor aplicațiilor prin intermediul unor librării de API-uri, iar interacțiunea dintre aplicații, deși este controlata cu grijă, este suportată în întregime.
În Android, toate aplicațiile au un statut egal. Aplicațiile terțe și cele native sunt scrise folosind acceleasi API-uri și sunt executate în accelasi mediu de execuție. Utilizatorii pot scoate și înlocui orice aplicație nativă cu o alternativă oferită de către terți dezvoltatori.
2.1.1 Caracteristici si specificații ale sistemului Android
Tabel 1 Caracteristici si specificații ale sistemului Android
Primul strat este Linux Kernel. Android este construit pe o fundație destul de solidă: un kernel de Linux. Acest layer este rezervat sistemului, programatorul și utilizatorul nu vor utiliza direct serviciile sale.
Al doilea strat, Native Libraries, reprezintă bibliotecile native Android. Sunt scrise în C sau în C++ și sunt compilate pentru un anumit hardware. Aici sunt bibliotecile responsabile de gestiunea bazelor de date (SQLite), redarea filmelor (Media Framework) și afișarea fișierelor HTML (WebKit).
Android Runtime conține mașina virtuală Dalvik și bibliotecile Java. Aplicațiile Android rulează pe mașina virtuală Dalvik, programele sunt scrise în Java și compilate în bytecode. Fișierele .class sunt transformate în fișiere executabile Dalvik “.dex”. Toate acestea, pentru că aplicațiile rulează pe un sistem cu memorie destul de limitată și cu o putere de procesare mai mică.
Application Framework este partea cu care lucrează direct programatorul. Aceasta este preinstalată în Android, însa serviciile se pot extinde și se pot crea propriile componente.
Cele mai importante componente sunt:
Activity Manager: controlează ciclul de viață al aplicațiilor și stiva de navigare a utilizatorului.
Content Providers: conține datele ce sunt împărțite între aplicații (ex: contactele din telefon).
Location Manager: acces la GPS
Notification Manager: alerte trimise utilizatorului că ceva s-a întamplat în background.
2.1.2 Aplicatiile sistemului Android
Principalele componente ale unei aplicatii Android sunt:
Activity(Activitate)
Reprezintă o interfață a utilizatorul, fereastra sau formular. O aplicatie Android poate avea una sau mai multe activitati, de exemplu:
Agenda poate avea o activitate pentru a gestiona contactele,
Activitate pentru a gestiona întâlniri și una pentru a edita o intrare in agendă.
Fiecare Activitate are propriul sau ciclu de viață, independent de ciclul de viață al procesului asociat aplicației.
Fiecare activitate are propria stare si datele acesteia pot fi salvate sau restaurate. Activitățile pot fi pornite de aplicații diferite (daca e permis). Are un ciclu de viata complex deoarece aplicațiile pot avea activități multiple și doar una este în prim-plan. Utilizând managerul de activități, sistemul Android gestionează multe activități care se găsesc în diferite stări (pornire, în execuție, întreruptă, oprită, distrusă).
În SDK, activitatea este implementată folosind o subclasă a clasei Activity care extinde clasă Context; Ciclul de viață al unei activități descrie starea în care o activitate poate fi la un moment dat:
Running
Activitatea a fost creată (onCreate()), pornită (onStart()) și este afișată pe ecranul aparatului; în cazul în care activitatea a mai fost utilizată și aplicația a salvat starea accesteia (onSaveInstanceState()), activitatea este reluată din acel punct (onRestoreInstanceState() și on Resume()); în acceasta stare utilizatorul interacționează cu activitatea prin intermediul interfeței dispozitivului (tastatură, touchscreen, display);
Paused
Activitatea pierde prim-planul (onPause()), deoarece o altă activitate este executată, cum ar fi o fereastra de dialog, de asemenea, în cazul în care aparatul intră în modul sleep, activitatea este oprită temporar; activitatea își poate relua execuția(onResume()) și este plasată înapoi în prim-plan;
Stopped
Activitatea nu mai este în uz și pentru că este oprită(onStop()), nu este vizibilă; Pentru a fi reactivată (ea deja există), activitatea trebuie să fie repornită (onRestart() și onStart()) și reluată (onResume());
Destroyed
Activitatea este distrusă (onDestroy()) și memoria s-a eliberat, deoarece nu mai este necesară sau sistemul are nevoie de memorie suplimentară pentru rutinele proprii sau pentru alte activități; deoarece managementul memoriei este un aspect important pentru sistemul de operare Linux al dispozitivului mobil, procesul care găzduiește o activitate întreruptă, oprită sau distrusă, poate fi terminat pentru a eliberă memorie pentru noi activități; doar procesele ce gestionează activități sunt protejate;
Activitatea are mai multe stări între care există tranziții clare. În ciuda faptului că lucrurile pot arăta complicat, în realitate ele sunt mult mai simple dacă ne concentrăm pe următoarele elemente:
O singură activitate poate fi în prim- plan la un moment dat.
Doar sistemul gestionează stările și tranzițiile unei activități și nu programatorul (nu în mod direct, deoarece atunci când se lansează o activitate nouă se modifică implicit starea activității curente). Sistemul va anunța atunci când activitatea își schimbă starea prin intermediul handler-elor (metode de formă onXXX()) pentru evenimentele de tip tranziție; Programatorul poate adaugă propriul cod pentru supradefinirea acestor metode:
onCreate(Bundle)
Activitatea este creată folosind argumentul metodei de tip Bundle există posibilitatea să restabiliți starea activității, care a fost salvată într-o sesiune anterioară; după ce activitatea a fost create, va fi pornită(onStart());
Ciclul de viață al unei activități
onStart()
Apelată în cazul în care activitatea urmează să fie afișată; din acest punct, activitatea
poate veni în prim plan (onResume()) sau rămâne ascunsă în fundal (onStop());
onRestoreInstanceState(Bundle)
Apeleta în cazul în care activitatea este inițializată cu datele dintr-o stare anterioară, ce a fost salvată; în mod implicit, sistemul restaurează starea interfeței cu utilizatorul (starea controalelor vizuale, poziția cursorului, etc);
onResume()
Apelată când activitatea este vizibilă iar utilizatorul poate interacționa cu această; Din această stare, activitatea poate fi prioară; după ce activitatea a fost create, va fi pornită(onStart());
Ciclul de viață al unei activități
onStart()
Apelată în cazul în care activitatea urmează să fie afișată; din acest punct, activitatea
poate veni în prim plan (onResume()) sau rămâne ascunsă în fundal (onStop());
onRestoreInstanceState(Bundle)
Apeleta în cazul în care activitatea este inițializată cu datele dintr-o stare anterioară, ce a fost salvată; în mod implicit, sistemul restaurează starea interfeței cu utilizatorul (starea controalelor vizuale, poziția cursorului, etc);
onResume()
Apelată când activitatea este vizibilă iar utilizatorul poate interacționa cu această; Din această stare, activitatea poate fi plasată în fundal, devenind întreruptă (onPause);
onRestart ()
Apelată în cazul în care activitatea revine în prim-plan dintr-o stare oprită (stopped); după această activitatea este pornită (onStart() din nou;
onPaused()
Apelată atunci când sistemul aduce în prim-plan o altă activitate; Activitatea curentă este mutată în fundal și mai târziu poate fi oprită (onStop() sau repornită și afișată (onResume()); acesta este un moment bun pentru a salvă datele aplicației într-un mediu de stocare persistent (fișiere, baze de date) deoarece după această fază de activitate poate fi terminată și distrusă fără a se anunța acest lucru;
onSaveInstanceState(Bundle)
Apelată pentru a salva starea curentă a activității; În mod implicit , sistemul salvează starea interfeței cu utilizatorul;
onStop()
Apelată în cazul în care activitatea nu mai este utilizată și nu mai este vizibilă deoarece o altă activitate ineractioneaza cu utilizatorul; din acest punct, activitatea poate fi repornită (onRestart()) sau distrusă (onDestroy();
onDestroy()
Apelată în cazul în care activitatea este distrusă , iar memoria sa eliberată; acest lucru se pate întâmpla în cazul în care sistemul necesită mai multă memorie sau dacă programatorul termină explicit activitatea apelând metoda finish() din clasa Activity; Deoarece tranzițiile dintre straturi sunt descrise prin apeluri către diferite metode de tipul onXXX(), ciclul de viață al unei activități poate fi descris de succesiunea posibilă a acestor apeluri.
Intent(Intentie)
Reprezintă o entitate universală în Android, folosită pentru a deschide o activitate sau un serviciu care urmează să fie executată. Oarecum similar cu conceptual de event-handler din NET sau Java.
Service(Serviciu):
Un task care se execută in fundal, fără interacțiunea directă cu Utilizatorul;
Content provider (Furnizor sau manager de conținut);
Un API folosit pentru a gestiona datele private ale aplicației;
Un sistem de management de date ce descrie o alternativă la sistemul de fișiere, baze de date SQLite sau orice altă soluție de stocare persistentă;
Implementată de o subclasă a clasei ContentProvider;
Soluție pentru a partaja și controla (pe bază de pemisiuni) transferul de date între aplicații ( de exemplu , sistemul Android oferă un furnizor de conținut pentru datele de contact);
Broadcast receiver;
2.2 SQLITE
În termeni simpli, SQLite este un software care oferă un sistem de baze de date relaționale (RDBMS). Bazele de date relaționale sunt folosite pentru a crea tabele de largi dimensiune, tabele care comunică între ele. În plus, pentru stocarea datelor și administrarea acestora, SQLite utilizează un motor de baze de date care poate procesa comenzi complexe de interogare, care pot combina date din mai multe tabele și crează rapoarte. Alte baze de date relaționale sunt: Oracle Database, DB2 (oferit de compania IBM), Microsoft SQL Server, MySQL și multe altele.
Cuvântul „Lite” din SQLite nu se referă la capacitățile sale. Mai degrabă SQLite este ușor de instalat și de utilizat.
2.2.1 Caracteristici SQLite
Fără server
SQLite nu are nevoie de server pentru a funcționa. Librăria SQLite accesează direct fișierele stocate local.
Zero configurare
Neavând server înseamnă că nu trebuie configurat nimic. Crearea unei baze de date în SQLite este la fel de simplu ca și deschiderea unui fișier.
Cross-Platform
Întreaga instanță a bazei de date se află într-un singur fișier cross-platform, astfel nefiind nevoie de administrare.
Independent
O singură librărie conține intreag sistemul de baze de date, care se integrează în mod direct în aplicația gazdă.
Compact
Instalarea de bază este mai mică de un megabyte de cod și necesită doar câțiva megabytes de memorie. Cu unele ajustări, atât dimensiunea librăriei cât și memoria necesară pot fi reduse semnificativ.
Multiple facilități
SQLite poate utiliza majoritatea caracteristicilor de interogare aflate în SQL92.
De încredere
Echipa de dezvoltare SQLite pune accent atât pe testarea și verificarea codului cât și pe funcționalitate.
În concluzie, SQLite oferă un mediu funcțional și flexibil de baze de date relaționale, care consumă resurse minime și nu crează comlpicații pentru dezvoltatori.
Autonoma, nu necesită server
Spre deosebire de majoritatea bazelor de date relaționale, SQLite nu are o arhitectură client/server. Majoritatea bazelor de date de mari dimensiuni conțin o arhitectură client/server foarte dezvoltată și un motor de baze de date pe măsură.
Serverul bazei de date constă adesea în mai multe procese care rulează concomitent pentru a gestiona toate conexiunile clientului, acțiunile de tip Input/Output și procesarea interogărilor. O instanță a unei baze de date constă de obicei într-un număr mare de fișiere organizate în unul sau mai multe directoare sub formă de arbore. Pentru a accesa baza de date, toate fișierele trebuie să fie prezente și corecte. Acest lucru poate îngreuna mutarea fișierelor sau realizarea unui backup a instanței.
Prin eliminatea serverului, o cantitate semnificativă de complexitate este eliminată. Acest lucru simplifica componentele software și aproape elimină necesitatea unui sistem de operare avansat. Spre deosebire de un server tradițional de baze de date relaționale, care necesită sisteme performance, cu abilități de multi-tasking, SQLite nu necesită mai mult decât abilitatea de a citi și a scrie.
Un singur fișier
SQLite stochează întreaga bază de date într-un singur fișier. Acest fișier conține layout-ul bazei de date precum și toate datele păstrate în tabele și indexuri. Formatul fișierului este de tip cross-platform și poate fi accesat de pe orice computer.
Având întreaga bază de date într-un singur fișier, crearea acesteia, copierea, sau realizarea de backup-uri este extrem de simplă. Întreaga bază de date poate fi trimisă prin e-mail, postată pe forum, mutată, modificată și distribuită la fel de simplu că și un document în word.Nu există nici o șansă ca o baza de date să devină coruptă sau indisponibilă pentru că un fișier din 100 a fost accidental mutat sau redenumit.
Zero Configurare
Din punctul de vedere al utilizatorului, SQLite nu necesită nimic de instalat și nimic de configurat. În timp ce există un număr mare de parametri de modificat pentru dezvoltatori, acestea sunt ascunse pentru utilizatori. Eliminând partea de server și migrând motorul bazei de date direct în aplicație, clienții nu sunt nevoiți să știe cum utilizează bază de date. Este destul de util să creezi o aplicație astfel încât selectarea unui fișier este singură interacțiune a clientului. Interacțiune cu care sunt deja obișnuiți.
Siguranță ridicată
Scopul unei baze de date este ca datele să fie organizate și păstrate în siguranță. Echipa de dezvoltare a SQLite este conștientă de faptul că nimeni nu va folosi un produs care are o reputație negativă, având erori și fiind nesigur. Pentru a menține un nivel ridicat de încredere, biblioteca SQLite este testată agresiv înainte de fiecare lansare.
Acest nivel ridicat de testări ține nivelul de erori relativ scăzut. Nici o aplicație nu este perfectă, dar erorile care duc la pierderea datelor sau coruperea bazei de date sunt aproape nule. Majoritatea erorilor sunt legate de performanță, atunci când bază de date va face lucrul potrivit, dar într-un mod nepotrivit, ceea ce poate duce la rularea mai lentă.
Mulți utilizatori folosesc SQLite deoarece este simplu, rapid si compact. Dar aceste calități sunt doar accidente fericite. Utilizatorii descoperă, deasemenea, că SQLite este foarte sigur. Siguranța este o consecință a simplismului. Cu mai puțină complicare, este mai puțin loc de greșeli. Deci, da, SQLite este mic, rapid și de încredere (sigur), dar în primul rând și cea mai mare calitate a lui este aceea că reușește să fie simplu. Simplitatea într-un motor de baze de date poate fi fie un punct tare, fie unul slab, depinde de ceea ce încerci să faci. Pentru a atinge simplitatea, SQLite a trebuit să sacrifice alte caracteristici care sunt găsite de unii oameni folositoare, ca cea a concurenței înalte, controlul la accesul detaliat, un set bogat de funcții implementate, proceduri stocate, extensii XML și/sau Java, scalabilitate tera- sau peta-octet și așa mai departe. Dacă sunt necesare unele din aceste caracteristici și nu conteaza gradul de complexitate adugată pe care o aduce, atunci SQLite nu este probabil baza de date necesară. Nu este proiectat să concureze cu Oracle sau cu PostgreSQL.
Regula de bază pentru când este potrivit să folosim SQLite este aceasta: folosește SQLite în situații unde simplitatea în administrare, implementare și întreținere sunt mai importante decât nenumăratele caracteristici complexe pe care motoarele de baze de date enterprise le furnizează. După cum se dovedește, situațiile unde simplitatea este o alegere mai bună sunt tot mai des întâlnite.
2.2.2 Situații în care SQLite funcționează la potențial maxim:
Situri web
SQLite de obicei va merge formidabil ca bază de date pentru trafic al siturilor web mic spre mediu (care este, să spunem, 99.9% din toate siturile). Cantitatea de trafic web pe care SQLite îl poate administra depinde, bineînțeles, de cât de mult folosește situl web baza de date. În general, orice sit care primește mai puțin de 100000 de vizite/zi ar trebuii să meargă bine cu SQLite. Cele 100000 de vizite/zi sunt o estimare conservativă, nu o limită maximă. SQLite a fost demonstrat că merge și cu de 10 ori această cantitate de trafic.
Dispozitive și aplicații încapsulate
Deoarece o bază de date SQLite necesită puțină (sau deloc) administrare, SQLite este o alegere bună pentru dispozitive sau servicii care trebuiesc să meargă neadministrate sau fără sprijin uman. SQLite este potrivit pentru a fi folosit în telefoane mobile, PDA-uri și altele. Ar putea merge bine și ca bază de date încapsulată în aplicații consumator descărcabile.
Format de fișier la aplicații
SQLite a fost folosit cu succes ca un fișier pe disc sau aplicații desktop ca de exemplu unealtă de analiză financiară, pachete CAD, programe de ținut înregistrări și așa mai departe. Operația tradițională File/Open efectuează un sqlite3_open() și execută un BEGIN TRANSACTION pentru a obține acces exclusiv la conținut. File/Save face un COMMIT urmat de un alt BEGIN TRANSACTION. Folosirea tranzacțiilor garantează că update-urile la fișierul aplicației sunt atomice, consistente, izolate și durabile (ACID). Declanșatoare temporare pot fi adăugate bazei de date pentru a înregistra toate schimbările într-o tabela de logare (temporară) Undo/Redo. Aceste schimbări pot fi după aceea urmărite când utilizatorul apasa butoanele Undo și Redo. Folosind această tehnică, o implementare pentru un număr de pași nelimitați Undo/Redo poate fi scrisă în surprinzător de puțin cod.
Înlocuitor pentru fișierele disc ad hoc
Multe programe folosesc fopen(), fread() și fwrite() pentru a creea și administra fișiere de date în formate proprii. SQLite merge foarte bine că înlocuitor pentru aceste fișiere de date ad hoc.
Baze de date interne sau temporare
Pentru programe care au o mulțime de date care trebuiesc mutate sau sortate în diverse direcții, este de obicei mai ușor și mai rapid să încarce datele într-o bază de date SQLite în-memorie și să folosesca query-uri cu JOIN-uri și clauze ORDER BY pentru a extrage datele în formă și ordinea dorită, decât să încerce codarea acestor operații manual. Folosind o bază de date SQL intern în acest mod oferă deasemenea programului o flexibilitatea mai mare de când coloane noi și indici pot fi adăugați fără a recoda fiecare query.
Unealtă linie-comandă pentru analiză dataset-urilor
Utilizatorii SQL experimentați pot pune programul linie-comandă sqlite pentru a analiza diferite dataset-uri. Date brute pot fi importate din fișiere CSV (Comma Separated Values – Valori Separate prin Virgulă), după acea datele pot fi tăiate și aranjate pentru a genera o miriadă (un număr foarte mare) de rapoarte scurte. Utilizări posibile includ analiză log-urilor pe un sit, analiză statisticilor sportive, compilarea metricilor programării și analiza rezultatelor experimentale. Se poate realiza, binenteles, același lucru cu o bază de date enterprise client/server. Avantajul în folosirea SQLite în această situație este acela că SQLite este mai ușor de configurat și bază de date rezultată este un singur fișier pe care îl poți stoca pe o dischetă, un pen-drive sau un e-mail către un coleg.
Înlocuitor al unei baze de date enterprise în timpul unor demo-uri sau teste
Dacă realizam o aplicație client pentru un motor de baze de date enterprise, este logic să utilizam o structură de bază de date generică care îți permite să te conectezi la multe diferite tipuri de motoare de baze de date SQL. Este și mai logic să includem SQLite în amestecul de baze de date suportate și să legam static motorul SQLite cu clientul. În acest mod programul client poate fi folosit de sine stătător cu un fișier SQLite pentru teste sau pentru demonstrații.
Pedagogia bazelor de date
Deoarece este simplu de setat și folosit (instalarea este trivială: se copiaza doar SQLite sau executabilul sqlite.exe pe mașină dorită și se ruleza) SQLite devine un motor de baze de date apt pentru a fi folosit în predarea SQL. Studenții pot ușor creea oricât de multe baze de date doresc și pot trimite cu ajutorul e-mail-ului aceste baze de date către profesor pentru observații sau pentru notare. Pentru studenți mai avansați care sunt interesați am studiat cum este implementat un RDBMS, codul SQLite foarte bine documentat, comentat și modular poate servi că o bază bună. Nu spunem că SQLite este un model exact a cum sunt implementate alte motoare de baze de date, dar un student care înțelege cum funcționează SQLite poate mult mai rapid înțelege principiile operaționale ale altor sisteme. Extensiile experimentale de limbaj SQL Arhitectură simplă și modulară a SQLite face din el o platformă bună pentru prototipizarea de idei și caracteristici noi pentru limbajul bazei de date (experimente).
2.2.3 Situații în care alt RDBMS ar merge mai bine
Aplicații Client/Server
Dacă avem multe programe client care accesează o bază de date comună peste o rețea ar trebui să considerăm folosirea unui motor de baze de date client/server în locul a SQLite. SQLite va merge peste o rețea de fișiere sistem, dar din cauza latenței asociată majorității fisierelor sistem rețea, performanța nu va fi satisfăcătoare. De asemenea, implementarea blocării a multor fisiere în rețea (logică) conține bug-uri (și pe Unix și pe Windows). Dacă blocarea fișierului nu merge așa cum ar trebui, este posibil că două sau mai multe programe client să modifice aceeași parte a aceeași bază de date în același moment, rezultând în o corupere a bazei de date. Deoarece această problemă rezultă din bug-uri din implementarea ce stă la bază fisierelor sistem, nu este nimic ce SQLite ar putea face să prevină problema. O bună regulă este aceea că ar trebui să evitam folositea SQLite în situații în care aceeastă bază de date va fi accesată simultan de mai multe calculatoare într-un fișier sistem rețea.
Situri web cu volum mare
SQLite va funcționa în mod normal bine pentru că baza de date sprijină un sit web. Însă dacă situl web este atât de aglomerat încât ne gândim să împarțim componența bazei de date pe o mașină separată, atunci cu siguranță ar trebui să luam în considerare folosirea unui motor de baze de date client/server în locul SQLite.
Dataset-uri foarte mari
Când începem o tranzacție în SQLite (ceea ce se întâmplă automat înainte de orice operație de scriere care nu este într-un explicit BEGIN…COMMIT) motorul are de alocat un bitmap de pagini murdare în fișierul disc pentru a-l ajuta la administrarea jurnalului rollback (de revenire). SQLite necesită 256 de octeți de RAM pentru fiecare 1Mo de bază de date. Pentru baze de date mai mici, cantitatea de memorie necesară nu este o problemă, dar când bază de date începe să crească în rangul mulți-gigaocteți, mărimea bitmapului poate devenii foarte largă. Dacă trebuie să depozităm și să modificăm mai mult de câteva duzini de Go de date, atunci ar trebui să ne gândim să folosim un motor de baze de date diferit.
SQLite folosește lacăte reader/writer pe întregul de date. Orice proces se citeste din orice parte bazei de date, toate celelalte procese sunt oprite din orice punct a bazei de date. Similar, oricând un proces scrie date, toate celelalte procese sunt oprite din citit orice parte a bazei de date. Pentru multe situații nu este o problemă. Fiecare aplicație face propria operație, baza de date lucreaza rapid și trece mai departe, nici o închidere nu durează mult de câteva milisecunde. Sunt unele aplicații, însă, care necesită mai multă concurență, și acele aplicații ar avea nevoie de abordări diferite.
Majoritatea bazelor de date SQL sunt bazate pe modelul client/server. Din cele care sunt fără server, SQLite este singura care este știută, de autor, că permite mai multor aplicații să acceseze aceeași bază de date în același timp.
Alocarea tipului de date evident
Majoritatea motoarelor de baze de date SQL folosesc atribuire statică a tipului de date. Un tip de data este asociat cu fiecare coloană dintr-un tablou și doar valorilor a acelui tip de date particular le este permis să fie stocate în acea coloană. SQLite relaxează această restricție folosind modul de atribuire a tipului de date evident. În acest mod, tipul de date este o proprietate a valorii însăși, nu a coloanei în care valoarea este stocată. SQLite, astfel, permite utilizatorului să stocheze orice valoare de orice tip în orice coloană necontând tipul declarat al acelei coloane. (Sunt niște excepții de la această regulă: O coloană INTEGER PRIMARY KEY poate stoca doar întregi. SQLite încearcă să convearteasca valorile în tipul de date declarat a coloanei când poate.)
Specificațiile limbajului SQL cer alocarea statică a tipului de date. De aceea unii utilizatori spun că folosirea modului de alocare a tipului de date evident este un bug în SQLite. Autorii SQLite, pe de altă parte, țin să creadă că această este o caracteristică. Autorii spun că alocarea statică este un bug în specificațiile SQL pe care SQLite l-a reparat într-un mod care este compatibil înapoi.
Înregistrări de lungime variabilă
Majoritatea altor motoare de baze de date SQL alocă o cantitate fixă de spațiu de disc pentru fiecare linie în majoritatea tabelelor. Ele utilizează tehnici speciale pentru manevrarea BLOB-urilor și CLOB-urilor care pot fi de o dimensiune foarte variată. Pentru majoritatea tabelelor, însă, dacă declari o coloanasa fie VARCHAR(100) atunci motorul de baze de date va aloca 100 de octeți spațiu pe disc indiferent de cât de multă informație stochezi în acea coloană.
SQLite, în contrast, folosește numai cantitatea de spațiu pe disc necesară să stocheze informația în o linie. Dacă stocăm un singur caracter în o coloană VARCHAR(100), atunci un singur octet de spațiu pe disc este folosit (de fapt doi octeți – este un overhead la începutul fiecărei coloane pentru a-i înregistra tipul de date și lungimea).
Folosirea înregistrărilor de lungime variabila are un număr de avantaje. Se concretizează, evident, în fișiere bază de date mai mici. De asemenea face bazele de date să ruleze mai rapid, de vreme ce este mai puțină informație să fie mișcată de pe și pe disc. Și, această metodă face posibilă lui SQLite să folosească atribuirea tipului de date evident în locul metodei de alocare statică.
Cod sursă lizibil
Codul sursă a SQLite este proiectat pentru a fi lizibil și accesibil unui programator mediu. Toate procedurile și structurile de date și multe variabile automate sunt comentate cu grijă cu informații utile despre ceea ce fac. Comentariile elevate sunt omise.
Declarațiile SQL compilează în cod mașină virtuală
Orice motor de baze de date SQL compilează fiecare declarație SQL într-un fel de structură de date internă care este după aceea folosită pentru a indeplini sarcină declarației. Dar, în majoritatea motoarelor SQL acea structură de date internă este o rețea complexă de structuri interconectate și obiecte. În SQLite, formă compilată a declarațiilor este un program scurt în un limbaj-mașină că reprezentare. Utilizatorii bazei de date pot să vadă acest limbaj mașină virtuală prin adăugarea la sfârșitul unui query a keyword-ului (cuvântul rezervat) EXPLAIN.
Folosirea unei mașini virtuale în SQLite a fost de un mare folos dezvoltării librăriei. Mașină virtuală oferă o crispă, o bine definită uniune între front-end-ul SQLite (partea care parsează declarațiile SQL și generează cod mașină virtuală) și back-end-ul acestuia (partea care execută codul virtual mașină și calculează un rezultat). Mașină virtuală permite dezvoltatorilor să vadă clar și în o manieră ușor de citit ceea ce SQLite încearcă să facă cu fiecare declarație pe care o compilează, care este de un ajutor de neimaginat în debugging. Depinzînd de cum este compilat, SQLite deasemenea are capacitatea de a urmării execuția codului mașină virtual – printand fiecare din instrucțiunile mașinii virtuale și rezultatele lor în timpul execuției.
Domeniul public
Codul sursă pentru SQLite este în domeniul public. Nu există nici o pretenție de drept de autor pe nici o parte din codul sursă de bază. (Documentarea și codul test sunt o altă problemă – unele secțiuni din documentație și logică testelor sunt guvernate de licențe open-source.) Toți contribuabilii la core-ul SQLite au semnat cum că nu au nici un interes de drept de autor asupra codului. Această înseamnă că oricine este capabil să facă orice vrea cu codul sursă SQLite (legal).
Sunt alte motoare de baze de date SQL cu licențe liberale care permit ca, codul să fie extins și liber folosit, dar acele alte motoare sunt încă guvernate de legea dreptului de autor. SQLite este diferit în aceea că acea lege a dreptului de autor nu i se aplică.
Fișierele de cod sursă pentru alte baze de date SQL încep în mod normal cu un comentariu ce descrie drepturile tale de a copia, vedea sau modifică acel fișier. Codul sursă SQLite nu conține nici o liceenta atât timp cât nu este guvernat de legea dreptului de autor. În schimbul unei licențe codul sursă SQLite oferă o binecuvântare:
"Fie să faci bine și nu rău
Fie să găsești iertare pentru tine și să ierți pe alții
Fie să împarți liber, niciodată luând mai mult decât dai."
Extensiile de limbaj SQL
SQLite oferă un număr de îmbunătățiri limbajului SQL ce nu le găsim în mod obișnuit în alte motoare de baze de date. Cuvântul rezervat EXPLAIN și alocarea tipului de date evident sunt specificate mai sus. SQLite de asemenea oferă declarații că REPLACE și clauza ON CONFLICT care permite control asupra rezolvării conflictelor. SQLite suportă ATTACH și DETACH, comenzi care permit ca mai multe baze de date independente să fie folosite în același query! SQLite definește API-uri care permit utilizatorului să adauge noi funcții SQL secvențe cumulate.
___________________________________________________________________________Using SQLite – O'Reilly Media
2.3 XML
( Extensible Markup Language )
Extensible Markup Language (XML) este un meta-limbaj de marcare recomandat de Consorțiul Web pentru crearea de alte limbaje de marcare, cum ar fi XHTML,RDF, RSS, MathML, SVG, OWL etc. Aceste limbaje formează familia de limbaje XML.
Meta-limbajul XML este o simplificare a limbajului SGML (din care se trage și HTML) și a fost proiectat în scopul transferului de date între aplicații pe internet, descriere structură date.
XML este acum și un model de stocare a datelor nestructurate și semi-structurate în cadrul bazelor de date native XML.
Datele XML pot fi utilizate în limbajul HTML, permit o identificare rapidă a documentelor cu ajutorul motoarelor de căutare. Cu ajutorul codurilor javascript, php etc. fișierele XML pot fi înglobate în paginile de internet, cel mai elocvent exemplu este sitemul RSS care folosește un fișier XML pentru a transporta informațiile dintr-o pagină web către mai multe pagini web.
2.3.1 Avantaje:
1. extensibilitate (se pot defini noi indicatori dacă este nevoie)
2. validitate (se verifică corectitudinea structurală a datelor )
3. oferă utilizatorilor posibilitatea de a-și reprezenta datele într-un mod independent
de aplicație
4. XML este simplu și accesibil (sunt fișiere text create pentru a structura, stoca și a
transporta informația)
5. poate fi editat, modificat foarte ușor (necesită doar un editor text simplu precum
notepad, wordpad etc.)
2.3.2 Ce este XML
După cum sugerează și numele, este un sistem extensibil de marcare, adică, mai simplu, este un sistem de marcare similar cu HTML, doar că este mult mai bun și mai dinamic, diferența esențială fiind că tagurile nu sunt definite, programatorul fiind liber să experimenteze.
2.3.3 Ce nu este XML
Poate este dificil de înțeles, dar fișierele XML nu fac nimic, sunt doar secvențe de text create pentru a structura, depozita și transporta informație, de exemplu:
În cadrul exemplului anterior se poate observa cum sunt create anumite taguri, spre deosebire de limbajul HTML unde tagurile trebuiau să fie cunoscute pentru a putea fi interpretate, în sistemul XML autorul poate defini propriile taguri pe care urmează să le manipuleze dupa gustul și necesitățile proprii.
___________________________________________________________________________________________
http://ro.wikipedia.org/wiki/XML
2.4 Adobe Photoshop
Photoshop este un software utilizat pentru editarea imaginilor pe calculator, program produs de compania americană Adobe Systems , care se se adresează în special profesioniștilor in domeniu.
2.4.1 Date curente
Adobe Photoshop, așa cum este cunoscut astăzi, este in topul gamei de produse software pentru editare de fotografii, imagini digitale, grafică pentru tipar, video. Adobe Photoshop este un program cu o interfață foarte intuitivă, care permite o multitudine extraordinară de modificări necesare în mod curent profesioniștilor și nu numai: editări de luminozitate și contrast, culoare, focalizare, aplicare de efecte pe imagine sau pe zone (selecții), retușare de imagini degradate, număr arbitrar de canale de culoare, suport de canale de culoare pe 8, 16 sau 32 biți, efecte third-party etc. Există situații specifice pentru un profesionist în domeniu când alte pachete duc la rezultate mai rapide, însă pentru prelucrări generale de imagine, întrucât furnizează instrumente solide, la standard industrial, Photoshop este efectiv indispensabil.
Alături de aplicația Photoshop (ajuns la versiunea CC, succesorul versiunii CS6[1]), este inclusă și aplicația ImageReady, cu un impresionant set de instrumente Web pentru optimizarea și previzualizarea imaginilor (dinamice sau statice), prelucrarea pachetelor de imagini cu ajutorul sistemului droplets-uri (mini-programe de tip drag and drop) și realizarea imaginilor rollover (imagini ce își schimbă aspectul la trecerea cu mouse-ul peste), precum și pentru realizarea de GIF-uri animate.
2.4.2 Avantaje
Principalele elemente prin care Photshop se diferențiază de aplicațiile concurente și prin care stabilește noi standarde în industria prelucrării de imagini digitale sunt:
Selecțiile
Straturile (Layers)
Măștile (Masks)
Canalele (Channels)
Retușarea
Optimizarea imaginilor pentru Web
2.4.3 Formate fișiere
Photoshop poate citi majoritatea fișierelor raster și vector. De asemenea, are o serie de formate proprii:
PSD (abreviere pentru Photoshop Document). Acest format conține o imagine ca un set de straturi (Layers), incluzând text, măști (mask), informații despre opacitate, moduri de combinare (blend mode), canale de culoare, canale alfa (alpha), căi de tăiere (clipping path), setări duotone precum și alte elemente specifice Photoshop. Acesta este un format popular și des răspândit în rândul profesioniștilor, astfel că este compatibil și cu unele aplicații concurente Photoshop.
PSB (denumit Large Document Format) este o versiune mai nouă a formatului PSD, conceput special pentru fișiere mai mari (2GB) sau cu o informație prezentă pe o suprafață definită de laturi mai mari de 30.000 de pixeli (suportă până la 300.000×300.000 pixeli).
PDD este un format mai puțin întâlnit, fiind asociat inițial aplicației Adobe PhotoDeluxe, astăzi (după 2002) compatibil doar cu aplicațiile Adobe Photoshop sau Adobe Photoshop Elements.
2.4.4 Ultimele instrumente
Camera RAW:
Instrumentul oferă acces rapid și facil la imaginile tip RAW produse de majoritatea camerelor foto digitale profesionale și de mijloc. Camera RAW se folosește de toate detaliile acestor fișiere pentru a obține un control total asupra aspectului imaginii, fără a modifica fișierul în sine.
Adobe Bridge:
Un browser complex, de ultimă generație, ce simplifică gestionarea fișierelor, poate procesa mai multe fișiere de tip RAW în același timp și pune la dispoziția utilizatorului informația metadata de tip EXIF etc.
Multitasking:
Adobe introduce posibilitatea de a folosi toate aplicațiile sale din suita "Creative suite 2" în sistem multitasking.
Suport High Dynamic Range (HDR) pe 32 biți:
Creează și editează imagini pe 32 biți, sau combină cadre fotografice de expuneri diferite într-una ce include valorile ideale de la cele mai intense umbre până la cele mai puternice zone de lumină.
Shadow/Highlight:
Îmbunătățește contrastul fotografiilor subexpuse sau supraexpuse, inclusiv imagini CMYK, păstrând în continuare echilibrul vizual al imaginii.
Vanishing Point:
Oferă posibilitatea de a clona, picta sau lipi elemente ce automat se transpun în perspectiva obiectelor din imagine.
Image Warp:
Capacitatea de a deforma imaginile plane după o matrice ușor editabilă, folosind mouse-ul.
Corectarea deformărilor cauzate de lentile:
Lens Distort corectează cu ușurință efectele obișnuite date de lentilele aparatelor foto precum cele cilindrice, sferice, tip pâlnie, "efectul de vignetă" (funcție de poziționarea față de lumină, colțurile fotografiilor sunt fie întunecate, fie luminate în contrast cu restul fotografiei) sau aberațiile cromatice.
Personalizarea aplicației:
Posibilitatea de a personaliza orice scurtătură sau chiar funcțiile din meniul aplicației și posibilitatea de a salva modificările pentru fiecare mod de lucru în parte.
Control îmbunătățit al straturilor (layers):
Capacitatea de a selecta mai multe straturi în același timp.
Smart objects:
Abilitatea de a deforma, redeforma și a reveni la starea inițială a obiectelor fără a pierde din calitate.
___________________________________________________________________________________________
http://ro.wikipedia.org/wiki/Adobe_Photoshop
Cap. 3 FUNCȚIONALITATEA APLICAȚIEI
Aplicația a fost realizată in eclipse, utilizand un plugin separat, numit Android Development Tools(ADT). În acest capitol va fi prezentată funcționalitatea acestei aplicații și modul de realizare al acesteia, explicând fiecare layout în parte.
3.1 Splash art
Splash art-ul este un simplu intro al aplicației. Acesta conține titlul și un spinner de două secunde, pentru a lasă suficient timp aplicației să încarce bază de date locală. Pentru acest spinner am folosit un thread cu timer de două secunde, care ulterior deschide meniul principal și oprește procesul, pentru a nu se putea reveni asupra acestuia utilizant butonul Back.
3.2 Meniul principal
Meniul principal este format din următoarele:
1. Căutare rapidă
După cum spune și numele butonului, această este metodă de căutare rapidă a unui traseu, introducând stația x de plecate și destinația y. Aplicația va afișa, în ordine cronologică, toate traseele care trec prin stațiile respective.
2. Căutare avansată
Utilizând această opțiune de căutare veți putea accesă orarul complet al unei linii, pentru o anumită stație. În primul rând se va selectă linia dorită, apoi stația, iar aplicația va afișa orarul complet al acesteia, sub formă de tabel, atât pentru tur cât și pentru retur.
3. Informații
Utilizând acest buton, se pot găsi detalii despre aplicație, cum ar fi autorul, versiunea aplicației, etc.
4. Contact
Utilizând această opțiune, utilizatorul aplicației îmi poate trimite un e-mail cu sugestii/reclamații.
Pentru fiecare buton a fost creat un onClickListener pentru a deschide acțiunea necesară.
3.3 Căutare rapidă
Căutarea rapidă utilizează bază de date creată, după cum am spus mai sus, în Android SQLite și funcționează în felul următor:
Se introduce stația de plecare (Poienelor) și destinația (Român) și apăsând butonul Search va returna toate liniile care trec prin cele două stații. În cazul de față, linia 31.
Baza de date se numește TransportDB iar tabelele din cadrul acesteia sunt următoarele:
STATII ( id_statie NUMBER
nr_linie NUMBER
den_statie VARCHAR )
TRASEU ( id_cursa NUMBER
nr_linie NUMBER
den_statie VARCHAR
ora_tur VARCHAR
ora_retur VARCHAR )
În figura 3.3.2 este ilustrată metoda de crearea a tabelelor.
In Figura 3.3.3 este afisat un exemplu de populare tabelei TRASEU, respectiv Linia 31, statia Scoala generala nr. 20.
În figura 3.3.4 este afișat un exemplu de populare a tabelei STAȚII, fiind introduse toate stațiile Traseului nr 31.
Exemplu de funcționalitate
Linia 33
Plecare: Vulturului
Sosire: Fragilor
stationsListDeparture = {2}
stationsListArrival = {3}
lineNumberList = {33}
Linia 33 pleacă din stația cu id_statie=2(Vulturului) și ajunge în stația cu id_statie=3(Fragilor).
Pentru a determina sensul traseului se compară id-urile stațiilor (Fig. 3.3.3). În acest caz, id_statie 2 (Vulturului) < id_statie 3 (Fragilor), deci se extrage ora_tur.
În cazul în care stațiile erau inversate, stația de plecare fiind Fragilor și cea de sosire, Vulturului, id_statie 3 (Fragilor) > id_statie 2 (Vulturului) deci s-ar fi extras ora_retur.
În Figura 3.3.6 se extrage ora curentă, pentru a nu afișa trasee care deja au trecut.
Pentru căutarea stațiilor, au fost folosite două TextView cu autocomplete. Este necesară tastarea primelor două litere ale stației iar aplicația va afișa sugestiie necesare.
Fig 3.3.7
În figura 3.3.5 este afișată crearea funcției de auto-complete în fișierul xml. Acesta este legat de un string în care sunt adăugate toate valorile.
Fig. 3.3.8
În figura 3.3.8 este afișat un exemplu pentru funcționalitatea de Auto Complete.
3.4 Căutare avansată
Aceasta optiune de cautare a fost conceputa in asa fel incat sa fie cat mai usor si rapid de folosit. De asemenea toate datele sunt stocate local, deci nu va fi nevoie de o conexiune permamenta la internet pentru a accesa informatiile necesare.
Utilizand aceasta optiune de cautare veti putea accesa orarul complet al unei linii, pentru o anumita statie. De exemplu: Linia 33, statia Biserica.
În figura 3.4.1 este prezentat meniul care conține toate liniile accesibile.
A fost creat utilizând un scrollView și câte un buton pentru fiecare traseu, care deschide următoarea acțiune (Fig 3.4.2).
Figura (3.4.2 ) conține un ImageView, care ulterior va afișa programul complet al stației dorite.
De asemenea, în partea de jos a imaginii se află un Sliding Drawer care conține toate stațiile traseului nr 33, structurate în două coloane, pentru tur și retur (Fig 3.4.3).
Sliding Drawer-ul a fost creat în fișierul xml (Fig 3.4.4). Acesta conține un Relative Layout în care au fost introduse cele două coloane: tur și retur.
Fig. 3.4.4
Fig 3.4.5
În figura 3.4.5 este afișată structura fișierului xml.
Pentru fiecare buton din interiorul Sliding Drawer-ului a fost creat un Switch and case Statement, care afișează rezultatul în funcție de butonul apăsat.
În figura 3.4.5 este afișat rezultatul final al căutării: Linia 33, stația Biserică.
Imaginile cu orarul au fost descărcată de pe site-ul RATBV, pentru a păstra stilul și structura originală. Imaginile au fost editate în Photoshop pentru a le scoate fundalul și a le compresa.
Toate datele fiind stocate local, aplicația trebuie să ocupe cât mai puțin spațiu posibil.
3.5 Informații
Acest layout contine cateva informatii despre aplicatie, precum versiunea si autorul.
In josul paginii se gaseste un buton cu ajutorul caruia poate reveni la meniul principal.
3.6 Contact
Cu ajutorul acestui buton utilizatorii aplicației îmi pot trimite un e-mail cu sugestii/reclamații.
Această funcție deschide o nouă acțiune spre software-ul telefonului, pentru a deschide clientul de e-mailul default al telefonului.
CONCLUZII
Aplicația ANDROID pentru mijloacele transportului public urban Brașov, a fost creată cu scopul de a simplifica accesul la informare prvind orarul mijloacelor de transport în comun și a îmbunătăți experiența călătorilor în utilizarea acesteia.
Dezvoltarea acestei aplicații a necesitat utilizarea multor cunoștințe practice și teoretice dobândite pe parcursul facultății, cum ar fi: programare și design orientat pe obiect, crearea și utilizarea bazelor de date relaționale.
De asemenea, datorită faptului că această tehnologie nu a fost studiată în facultate, am utilizat cunostinte conexe materiilor studiate, acest lucru fiind în sine o provocare, încercând să adaptez informațiile prin implementarea într-o soluție practică creată pentru folosirea zilnică de către utilizatori.
Feedback-ul utilizatorilor care au testat aplicația a fost unul pozitiv, acest fapt dându-mi satisfacția că această aplicație va fi de un real ajutor locuitorilor sau a turiștilor care vizitează orașul Brașov.
Aplicația având o bază de date locală, permite utilizarea fără o conxiune la internet mobil, fiind accesibilă tuturor utilizatorilor de smartphone cu sistem de operare ANDROID, fără costuri suplimentare.
BIBLIOGRAFIE
Using SQLite – O'Reilly Media
http://ro.wikipedia.org/wiki/Adobe_Photoshop
http://ro.wikipedia.org/wiki/SQLite
http://www.itcsolutions.eu/2011/09/08/android-tutorial-concepte-activitati-si-resurse-ale-unei-aplicatii-android/
http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)
BIBLIOGRAFIE
Using SQLite – O'Reilly Media
http://ro.wikipedia.org/wiki/Adobe_Photoshop
http://ro.wikipedia.org/wiki/SQLite
http://www.itcsolutions.eu/2011/09/08/android-tutorial-concepte-activitati-si-resurse-ale-unei-aplicatii-android/
http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatie Android Pentru Mijlocele Transportului Public Brasov (ID: 149412)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
