Aplicatie Android pentru vanzarea de articole vestimentare [305559]

[anonimizat]:

Lect.Univ.Dr. Cristina Tudose

Absolvent: [anonimizat]

2018

Cuprins

Limbajul de Programare

Java

C

C++

Android

Versiuni Android

Android Studio

Aplicatia in sine

Activitati si fragmente

Sql

Aplicatia Android Getae

Pagina Principala

Pagina Login

Pagina Register

Pagina ManageUsers

Pagina ManageProducts

Pagina Add a Clothing Item

Pagina Add an Accessory Item

Shopping cart

MyOrders

SubcatergoryPage

ProductPage

Capitolul I

Limbajul de programare

Un limbaj de programare este un limbaj formal care specifică un set de instrucțiuni care pot fi utilizate pentru a produce diferite tipuri de ieșiri. Limbajele de programare constau în general în instrucțiuni pentru un computer. Limbajele de programare pot fi utilizate pentru a crea programe care implementează algoritmi specifici.

[anonimizat]. [anonimizat]-[anonimizat]. De la începutul anilor 1800, programele au fost folosite pentru a [anonimizat], cutiile de muzică și pianele jucătorilor. [anonimizat] ([anonimizat]) nu au putut produce comportamente diferite ca răspuns la o anumită intrare sau condiție.

S-[anonimizat], și multe încă se creează în fiecare an. Multe limbi de programare necesită o determinare a calculelor într-o formă imperativă (adică o secvență de operații de efectuat), [anonimizat] ([anonimizat] a acestuia ).

[anonimizat], împărțită în cele două componente ale sintaxei și semantică. Unele limbaje sunt definite de un document de specificație ([anonimizat] C este specificată de un standard ISO), în timp ce alte limbi (cum ar fi Perl) au o implementare dominantă care este tratată ca referință. [anonimizat], iar extensiile luate din implementarea dominantă sunt comune.

[anonimizat], orientat pe obiecte și conceput special pentru a avea cât mai puține dependențe de implementare.

Se intenționează să se permită dezvoltatorilor de aplicații să "scrie o dată, să ruleze oriunde" (WORA), ceea ce înseamnă că codul Java compilat poate rula pe toate platformele care suportă Java fără a fi nevoie de recompilare.

Aplicațiile Java sunt în mod obișnuit compilate la octeți care pot rula pe orice mașină virtuală Java (JVM), indiferent de arhitectura calculatorului. Începând cu 2016, [anonimizat]-server, cu un raportor de 9 milioane de dezvoltatori.

Java a fost inițial dezvoltată de James Gosling la Sun Microsystems (care a fost achiziționată de Oracle Corporation) și lansată în 1995 ca o componentă de bază a platformei Java a Sun Microsystems. Limba derivă mult din sintaxa sa din C și C ++, dar are mai puține facilități de nivel scăzut decât oricare dintre ele.

James Gosling

C

C este un limbaj de programare cu scop general care este folosit pe scară largă pentru dezvoltarea software-ului de sistem și a aplicațiilor software. Între anii 1969 și 1973, Dennis Ritchie și Ken Thompson au fost proiectați și dezvoltați la Bell Labs pe baza limbajului B în scopul portării și dezvoltării sistemelor de operare UNIX.

Limbajul C este extrem de eficientă, flexibilă, bogată în caracteristici, expresivă și extrem de portabilă. A devenit popular printre programatori și a devenit cel mai utilizat limbaj de programare în ultimii 25 de ani. În prezent, compilatoarele C se găsesc frecvent în diferite sisteme de operare, cum ar fi Microsoft Windows, MacOS, Linux și Unix. Designul limbajului C a influențat mai multe limbi de programare ulterioare, cum ar fi C ++, Obiectiv-C, Java, C # și așa mai departe.

În anii '80, pentru a evita discrepanțele în limbajul C folosit de diferiți dezvoltatori, Biroul Național de Standarde a definit un set complet de gramatici standarde internaționale pentru limba C, numit ANSI C, ca standard de limbă C. Instrumentele de dezvoltare a programului din anii 1980 până în prezent au susținut, în general, sintaxa ANSI C.

Caracteristici Versatilitate ridicată. Deoarece este ușor de prelungit în funcție de gradul de libertate al programului și de scop, acesta se aplică tuturor domeniilor, cum ar fi descrierea sistemului de operare, software-ul aplicației și firmware-ului, dezvoltarea driverului de dispozitiv și controlul mașinii. Gama echipamentului corespunzător este largă. Hardware-ul care poate folosi limba C este diferit, de la calculatoarele personale la computerele încorporate pentru automobile și aparatele de uz casnic la supercomputere. Datorită versatilității și versatilității dispozitivelor compatibile, "utilizarea calculatoarelor" este disponibilă în majoritatea limbilor C. Indiferent de utilizarea comercială sau non-comercială, domeniul software utilizat este larg. Există software abundent pentru creare și utilizare. Deoarece unele medii de dezvoltare, cum ar fi software-ul pentru a converti la limbajul mașinii, sunt atașate la CPU sau sunt gratuite, puteți începe să utilizați fără plata taxei de licență. Timpul de dezvoltare este vechi, gramatica are o influență puternică asupra limbii mașinii, este complicată. În comparație cu limbajul nou dezvoltat pentru a compensa acest dezavantaj, acesta este un limbaj de nivel scăzut, greoi și dificil de învățat, așa cum este descris adesea. De la amatori la ingineri profesioniști, există mulți programatori și comunități de programatori sunt îmbogățite. Limbajul C are o mare influență asupra programării culturii, inclusiv a celor pozitive și negative, de la numărul mare de utilizatori. În cazul UNIX la care se aplică limba, deoarece cele mai multe lucruri pot fi procesate cu un limbaj de script, un procesor macro, un filtru sau o combinație a acestora, există aspecte în care câmpul ar putea fi împărțit bine. Standarde de specificație · Limbile derivate sunt, de asemenea, abundente și, ca rezultat al transplantării la o gamă largă, limbajul C poate fi folosit în câmpuri necorespunzătoare. Limba C are aspecte ale limbajului procedural și ale limbajului funcțional.

Proiectat cu limbaj compilator și sistem de operare în minte. Este o specificație de limbă orientată pe calculator, care poate realiza același lucru ca și codul de asamblare. Chiar și limbile de nivel înalt care pot scrie descrieri la nivel inferior sunt uneori numite limbi de nivel inferior, cu limbi de nivel înalt. Compilatorul C a urmărit ușurința portabilității, gradul de libertate, viteza de execuție, viteza de compilare, etc. În schimb sacrifică siguranța codului compilat. Există vulnerabilități de securitate, comportamente neașteptate datorate unor bug-uri ascunse, dificultăți de optimizare de către compilator. Dacă îl optimizați, este posibil să aveți dezavantaje, cum ar fi viteza de compilare lentă. În domeniul auto, definim un subset al limbajului C numit MISRA C pentru a completa punctele slabe ale limbajului C. Din circumstanțele pe care le-am dezvoltat pentru a spori portabilitatea compilatorului UNIX și C, putem scrie o descriere de nivel scăzut pentru kernel-ul sistemului de operare și compilatorul.

Dennis Ritchie

Ken Thompson

C++

C ++ este un limbaj de programare orientat pe obiect, cu tastare statică. Acesta a fost dezvoltat (inițial cu numele "C cu clase") de Bjarne Stroustrup de la Bell Labs în 1983 ca o îmbunătățire a limbajului C prin introducerea paradigmei de programare orientate pe obiecte, a funcțiilor virtuale, a supraîncărcării operatorilor, a moștenirii multiple, șablon și tratarea excepțiilor.

Limba a fost standardizată în 1998 (1998 "Tehnologia informației – Limbi de programare – C ++", actualizată în 2003). C ++ 11, cunoscut și ca C ++ 0x, este noul standard pentru limbajul de programare C ++ care înlocuiește revizuirea din 2003. După o revizuire minoră în 2014 (C ++ 14), cea mai recentă versiune a standardului (note informal ca C ++ 17) a fost publicată în 2017.

Bjarne Stroustrup a început să lucreze la limba în 1979. Ideea de a crea o nouă limbă a provenit din experiențele sale de programare în timpul realizării tezei de doctorat. Stroustrup a constatat că simula a avut caracteristici utile pentru dezvoltarea unor proiecte mari de software, dar limbajul era prea lent pentru utilizarea practică, în timp ce BCPL era rapid, dar prea scăzut pentru dezvoltarea aplicațiilor mari. Când Stroustrup a început să lucreze la Laboratoarele Bell, el a fost însărcinat cu analizarea kernel-ului Unix în calculul distribuit. Amintirea lucrării tezei, el a decis să adauge câteva din caracteristicile lui Simula în limba C. C a fost aleasă deoarece era o limbă generică, portabilă și rapidă. Pe lângă C și Simula, el a fost inspirat de limbi precum limbile ALGOL 68, Ada, CLU și ML. Inițial, caracteristicile clasei, clasa derivată, verificarea strictă a tipului și argumentul implicit au fost adăugate la C cu Cfront. Prima versiune comercială a fost lansată în octombrie 1985.

În 1983, numele limbii a fost schimbat de la "C cu clase" la C ++. Au fost adăugate noi funcții, inclusiv funcții virtuale, supraîncărcarea funcțiilor și a operatorilor, referințe, constante, controlul utilizatorului pentru gestionarea memoriei, verificarea îmbunătățită a tipului și comentariile de stil nou. În 1985, a fost publicată prima ediție a limbajului de programare C ++, care a furnizat un ghid de referință important pentru limba, care încă nu fusese oficial standardizată. În 1989, versiunea 2.0 a C ++ a fost lansată, incluzând schimbări în moștenire multiplă, clase abstracte, funcții statice ale membrilor, funcții membre const și membri protejați. În 1990 a fost publicat manualul de referință C ++ adnotat, care a furnizat baza pentru viitorul standard. Cele mai recente adăugiri de caracteristici includ șabloane, excepții, spații de nume, tipuri noi de distribuție și tip de date Boolean.

Ca și limba, chiar și biblioteca standard a evoluat. Prima adăugire la biblioteca standard C ++ a fost biblioteca de flux I / O care a oferit servicii de înlocuire pentru biblioteca tradițională C (cum ar fi printf și scanf). Ulterior, printre cele mai importante adăugări a fost Biblioteca de șabloane standard.

După ani de activitate, un comitet care a prezentat membrii ANSI și ISO standard C ++ în 1998. La câțiva ani după publicarea oficială a standardelor, comisia a urmat dezvoltarea limbii și a publicat în 2003 o versiune corectă a standardului. Un raport tehnic datează din 2005, numit "Raportul tehnic 1" (abreviat TR1) care, deși nu este oficial parte a standardului, conține o serie de extensii la biblioteca C ++ 11 standard. Nu există proprietar de limbă C ++, care să poată fi implementat fără a plăti redevență. Cu toate acestea, documentul de standardizare în sine este disponibil numai contra unei taxe.

Bjarne Stroustrup

Capitolul II

Android

Android este un sistem de operare mobil dezvoltat de Google Inc. și bazat pe Kernel Linux, însă nu este un sistem asemănător unix și nici o distribuție GNU / Linux, ci o distribuție încorporată Linux, deoarece aproape toate utilitățile GNU sunt înlocuite de Software-ul Java.

Este un sistem încorporat conceput în primul rând pentru smartphone-uri și tablete, cu interfețe specializate pentru televizoare (Android TV), automobile (Android Auto), ceasuri de mână (Android Wear), ochelari (Google Glass) și altele. În aprilie 2017 Android este cel mai răspândit sistem de operare mobil din lume, cu o cotă de piață de 62,94% din total, urmată de iOS cu 33,9%. În aceeași lună, a depășit, de asemenea, piața de piață ca cel mai utilizat sistem de operare pentru a naviga pe net, depășind de fapt sistemul de operare Windows, care până atunci avea cea mai mare cotă de piață din lume.

Dezvoltarea aplicației Android continuă prin intermediul Proiectului Android Open Source, care este un software gratuit, cu excepția mai multor firmware-uri non-gratuite incluse pentru producătorii de dispozitive și așa-numitele "Google Apps", cum ar fi Google Play. Este distribuită în condițiile licenței gratuite Apache 2.0, asigurându-vă că nu includeți software-ul acoperit de licențele copyleft.

În octombrie 2003, Nick Sears (vicepreședinte al T-Mobile), Andy Rubin (co-fondator al pericolului), Rich Miner (co-fondator al comunicațiilor Danger and Wildfire) și Chris White interfață grafică a Web TV), a înființat o companie, Android Inc., pentru dezvoltarea a ceea ce Rubin numea “dispozitive mobile mai constiente de poziția și preferințele proprietarului lor”. Inițial, compania a funcționat în secret, dezvăluind doar proiectarea de software pentru dispozitive mobile.

În același an, bugetul inițial a dispărut, motiv pentru care un împrumut de 10.000 de dolari de la Steve Perlman (un prieten apropiat al lui Rubin) a fost esențial pentru continuarea dezvoltării. Steve Perlman a dat banii lui Rubin într-un plic, dar a refuzat orice propunere de a participa la proiect. La 17 august 2005, Google a achiziționat compania, având în vedere faptul că compania Mountain View dorea să intre pe piața de telefonie mobilă.

În acești ani, echipa Rubin începe să dezvolte un sistem de operare mobil bazat pe kernel-ul Linux. Prezentarea oficială a "robotului verde" a avut loc la 5 noiembrie 2007 de către nou-creatorul OHA (Open Handset Alliance), un consorțiu de companii din domeniul Hi Tech care include Google, producători de smartphone-uri cum ar fi HTC și Samsung, cum ar fi Sprint Nextel și T-Mobile, precum și producătorii de microprocesoare precum Qualcomm și Texas Instruments Incorporated. Primul dispozitiv echipat cu Android care a fost lansat pe piață a fost HTC Dream, 22 octombrie 2008. Din 2008, actualizările Android pentru a îmbunătăți performanța și pentru a elimina problemele de securitate ale versiunilor anterioare au fost multe.

Din versiunea 1.5, fiecare actualizare sau lansare, similar cu ceea ce se întâmplă pentru multe versiuni de Linux, urmează o convenție alfabetică precisă pentru nume, care în acest caz sunt cele ale dulciurilor: versiunile 1.0 și 1.1 nu au un nume de desert și sunt identificate cu Numai numărul versiunii (dar cel de-al doilea, în timpul dezvoltării, a fost numit într-un Petit Four informal, în omagiul dulciurilor omonime), 1.5 a fost numit Cupcake, 1.6 Donut, 2.1 Eclair, 2.2 Froyo congelat iaurt), 2.3 Gingerbread (turtă dulce), 3.0 fagure de miere, 4.0 Sandwich Ice Cream, 4.1 Jelly Bean, 4.4 Kit Kat în urma unui acord cu Nestlé apoi 5.0 Lollipop. La 5 octombrie 2015, este de 6,0, cu numele Marshmallow. Pentru versiunea 7.0 N, Google lansează posibilitatea de a permite utilizatorilor să aleagă numele următoarei versiuni, iar Nutella apare printre numele posibile. La 30 iunie 2016, numele versiunii următoare este anunțat oficial, care pe 22 august este pregătit să apară pe smartphone-uri Android sub numele Nougat (nougat). Pe 22 august 2017 Android 8.0 Oreo este lansat, sub rezerva concesiunii Mondelēz. În martie 2013 Larry Page anunță că Andy Rubin a părăsit președinția Android pentru a se dedica altor proiecte Google. El este înlocuit de Sundar Pichai.

Versiuni Android

I – Android Cupcake

Deși nu este prima versiune de la Google după ce a cumpărat compania Android, versiunea 1.5 este considerată ca fiind prima versiune proeminentă care a evidențiat adevărata putere a platformei sale.

Cu această versiune, de fapt, Google a dat startul tendinței de a-și numi versiunile după deserturi delicioase. Numeroasele caracteristici romantice asociate versiunii Cupcake includ tastatura third-party și încărcarea directă pe YouTube.

II – Android Donut

Lansat în 2009, Android Version 1.6 a fost codificat sub numele de "Donut", după delicatețea delicioasă în formă de inel. Specialitățile sale, cum ar fi experiența îmbunătățită a utilizatorilor, suportul text-to-speech, aspectele video îmbunătățite și integrarea optimizată a căutării, au ajutat Google să se înrădăcineze ferm pe piața smartphone-urilor extrem de competitive.

Suportul pentru dimensiuni mai mari a ecranului și facilitățile de navigație "turn-by-turn" au fost celelalte tipuri de acoperiri dulci pe versiunea Donut.

III – Android Eclair

Numit după acele produse de patiserie alungite cu umplutură de ciocolată, versiunea Android 2.0 a fost lansată în octombrie 2009. Versiunea bug fixată ca 2.0.1 a urmat curând câteva luni mai târziu în decembrie 2009. Apoi, în ianuarie 2010, a venit Android 2.1 cu animație adăugată caracteristici.

Cu toate acestea, cele trei versiuni sunt adesea considerate ca o singură versiune. Navigarea cu hărți Google este caracteristica evidențiată. Alte caracteristici celebre ale Versiunii Éclair includ opțiunile de zoom bliț și digital pentru camera foto, imagini de fundal vii, mecanism de suport multi-touch și, bineînțeles, suport Bluetooth 2.1.

IV – Android Froyo

Următorul din coada de așteptare, Android 2.2 este despre viteza totală și nimic altceva. Scurt pentru iaurtul înghețat, Google a obținut viteza acestei versiuni îmbunătățită din punct de vedere tehnic. O altă trăsătură caracteristică unică a fost ecranul inițial redactat în mod unic. Acesta a asigurat o mai bună funcționalitate pentru dispozitiv, cu întregul proces raționalizat.

V – Android Gingerbread

Numit după popularele prajituri cu ghimbir, versiunea Android 2.3 a fost nouă și proaspătă în diferite moduri. Printre caracteristicile sale unice s-au numărat mai multe camere, apeluri de internet SIP, manager de descărcare, câțiva senzori cum ar fi un barometru, gravimetru etc.

VI – Android Honeycomb

Google a introdus Android 3.0 în februarie 2011 și la numit, Honeycomb. Realizat pentru tablete, versiunile 3.1 și 3.2 au urmat în succesiune rapidă. Gingerbread a fost, de fapt, prima actualizare a tabletelor Android.

VII – Android Ice Cream Sandwich

Versiunea 4.0 a fost rezultatul planului Google de a obține sintetizată platforma Honeycomb numai cu tablete cu o platformă mobilă. Purtată ca Sandwich de înghețată, funcționalitatea îmbunătățită nu a fost singura schimbare mare pe care a adus-o. În ceea ce privește designul, au existat și schimbări drastice.

Introducerea fontului implicit a fost un alt punct culminant al sandwich-ului de înghețată. Din această versiune, Google a adus efectiv toate serviciile sale sub umbrela "Google Play".

VIII – Android Jelly Bean

Deși a fost destinat, în primul rând, îmbunătățirii funcționalității și îmbunătățirii interfeței cu utilizatorul, "Google Now" a fost într-adevăr aspectul cel mai inovator al versiunii 4.1. Poreclit ca Jelly Bean, a fost ceva care ar putea ghici în mod corect ce trebuie să căutați, înainte de a căuta.

În afară de caracteristica predictivă, notificările extrem de interactive i-au făcut versiunii Jelly Bean să iasă în evidență. Versiunea 4.1 a fost de asemenea remarcată pentru motorul său unic de difuzare în text, denumit popular "tastarea vocii". Rezultatul a fost o îmbunătățire generală a performanței, care a asigurat o interfață de utilizator absolut netedă.

IX – Android KitKat

Google a dezvăluit oficial versiunea Android 4.4, pe care a numit-o drept Kitkat, în 2013. Nestle a oferit sprijin complet și chiar a lansat o campanie publicitară specială la lansarea sa.

Cu toate acestea, numele de cod pe care Google la avut inițial asociat cu Android 4.4 a fost "Key Lime Pie". Numele a fost ulterior schimbat în Kitkat, deoarece se credea că placinta de lămâie nu era un desert foarte popular.

Google a dorit un nume de desert cunoscut de toți și, prin urmare, a colaborat cu Nestle pentru numele de cod Kitkat. Versiunea 4.4 a debutat pe Nexus 5 și poate funcționa eficient pe multe dispozitive în comparație cu versiunile anterioare Android.

Caracteristica Google Now, introdusă inițial în Jelly Bean, a fost luată chiar înainte cu introducerea Kitkat. Anterior, a trebuit să atingeți gadgetul pentru a deschide asistența inteligentă artificială (AI). Acum, cu Jelly Bean, tot ce trebuie să faci pentru a iniția căutarea este să rostiți fraza necesară pentru gadget.

Un alt avantaj al versiunii 4.4 a fost faptul că sistemul de operare ar putea funcționa chiar și pe dispozitivele cu memorie RAM inferioară. 512 MB RAM a fost minimul recomandat. Introducerea Emoji pe tastatura Google a fost încă un aspect unic al Kitkat.

X – Android Lollipop

Cu versiunea 5.0, popular denumită Lollipop, Android ar putea să se răspândească într-o gamă largă de dispozitive, de la telefoane inteligente la televizoare și chiar la ceasuri inteligente. Lollipop a ieșit cu o nouă durată de execuție. Funcția de economisire a bateriilor asigură o viață excelentă a bateriilor pe aceste dispozitive diferite. Își salvează telefonul de la deteriorări chiar și în timp ce bateria este scăzută.

XI – Android Marshmallow

Android 6.0, numit Marshmallow, a fost lansat sub numele de cod Android M. Acesta a inaugurat într-un pumn de schimbări binevenite, care sunt sigur de a face un impact major. Modul de reducere a consumului de energie, care reduce drastic consumul de energie atunci când dispozitivul este inactiv, permisiunea de acces opțională, suportul USB complet acceptat, sistemul de susținere a senzorilor de amprentă incorporat este doar câteva dintre ele.

Permite chiar utilizatorului să formateze o cartelă MicroSD și să o folosească ca spațiu de stocare intern, beneficiind de același nivel de securitate.

XII – Android Nougat

Android „Nuga“ (nume de cod Android N în timpul dezvoltării) este a șaptea versiune majoră și versiunea originală a 14-a sistemului de operare Android. În primul rând lansat ca o versiune de testare alpha pe 9 martie 2016, a fost lansat oficial pe 22 august 2016, cu LG V 20 a fost primul smartphone lansat cu Nougat.

Modul de economisire a energiei care restricționează funcția dispozitivului pe ecran, inclusiv într-o vizualizare pe două ecrane. În plus, platforma a trecut la un mediu Java bazat pe OpenJDK și a primit suport pentru API-ul de randare grafică Vulkan și actualizări de sistem "fără sudură" pe dispozitivele acceptate.

Ca din 16 aprilie 2018, 30,8% din dispozitive care accesează Google Play rula sistemul de operare Nuga, cu 23,0% pe Android 7.0 și 7,8% pe Android 7.1, ceea ce face Nuga cel mai utilizat pe scară largă Android nume de cod.

XIII – Android Oreo

Android „Oreo“ (nume de cod Android O in timpul dezvoltarii) este a opta actualizare majoră și versiunea 15 a sistemului de operare Android. A fost lansat pentru prima oară ca previzualizare a dezvoltatorului de calitate alfa în martie 2017 și a fost lansat publicului la 21 august 2017.

Acesta conține o serie de caracteristici majore, cum ar fi gruparea de notificări, suport video în imagine pentru îmbunătățirea performanțelor și optimizarea utilizării bateriei și suport pentru autofiltre, Bluetooth 5, integrare la nivel de sistem cu aplicații VoIP, gamă largă de culori și Wi -Fi conștient. Android Oreo introduce, de asemenea, două caracteristici importante ale platformei: Android Go – o distribuție software a sistemului de operare pentru dispozitive low-end – și suport pentru implementarea unui strat de abstractizare hardware.

Android Studio

Android Studio este un mediu integrat de dezvoltare (IDE) pentru programe intensive pentru platforma Android. Publicat la 16 mai 2013 la conferința Google I / O ținută de Managerul de produs Google, Katherine Chou. O versiune preliminară de previzualizare a fost lansată în mai 2013, cu un număr de versiune de 0,1, apoi introdus începând cu versiunea 0.8 lansată în iunie 2014. Prima construcție stabilă a fost lansată în decembrie 2014, versiunea 1.0.
Bazat pe software-ul JetBrains IntelliJ IDEA, Android Studio a fost proiectat special pentru dezvoltarea de aplicații Android. Este disponibil pe Windows, Mac OS X și Linux și înlocuiește Eclipse Android Development Tools (ADT), devenind IDE primar Google pentru dezvoltarea nativă a aplicațiilor Android.

Cum instalăm Android Studio

Aplicația se găsește pe site-ul developer.android.com

Dupa ce aplicația se descarcă in calculator se pornește și o să apară :

De aici se va apăsa pe Next

Aici se poate alege dacă si Android Virtual

Device (cu acesta se poate testa aplicația)

Dupa ce a fost ales se poate apăsa pe Next

Aici se poate alege in ce locație din calculator sa fie instalat programul Android Studio

Dupa ce s-a ales locația de instalare se poate accesa butonul Next

De aici se poate alege locația scurtăturii (shortcut)

programului din Meniul de Start.

După ce această locație s-a ales se va accesa butonul de Instalare.

Dupa ce se instalează se poate accesa butonul Next.

Bifând această căsuță se va putea deschide programul

Android Studio la apăsarea butonul de Finish.

In acest meniu se alege tema programului

Aici se va instala kit-ul de dezvoltare al software-ului sau Sdk-ul Androidului.

După ce se va accesa butonul Finish programul își v-a descărca fișierele propriu-zise.

Aplicația în sine

Acesta este ecranul principal de unde se poate incepe un proiect nou, se poate deschide unul deja inceput sau se pot importa proiecte sau coduri Android

Se acceseaza butonul de începere al unui nou proiect și se v-a deschide această pagină în care se va numi aplicația, compania si locația proiectului. Bifând acele doua căsuțe se pot include suportul Kotlin si C++

Aici se alege versiunea de android pe care viitoarele aplicații să ruleze:

Tabletă, Telefon, Gadget-uri pe care se pot purta, Televizoare, Android audio și alte lucruri ce conțin androidul.

Aici se numește modulul.

De aici se încep activitățiile.

Activități și Fragmente

Activități

Activitatea este un singur lucru axat pe care utilizatorul îl poate face. Aproape toate activitățile interferează cu utilizatorul, astfel încât clasa de Activitate are grijă să creeze o fereastră în care se poate plasa interfața utilizatorului cu setContentView (Vizualizare). În timp ce activitățile sunt adesea expuse utilizatorului ca ferestre pe întreg ecranul, ele pot fi folosite și în alte moduri: ca ferestre plutitoare (printr-o temă cu setul R.attr.windowIsFloating) sau încorporate în interiorul unei alte activități (utilizând ActivityGroup). Există două metode care vor implementa aproape toate subclasele din Activitate:

onCreate (Bundle) este locul unde se inițializează activitatea. Cel mai important, aici, de obicei, se apelează setContentView (int) cu o resursă de aspect definind interfața utilizator și folosind findViewById (int) pentru a prelua widget-urile din interfața de utilizator pe care trebuie să se interacționeze programat.

onPause este locul unde se ocupă de faptul că utilizatorul a părăsit activitatea. Cel mai important, orice modificare efectuată de utilizator ar trebui să fie angajată în acest moment (de obicei pentru ContentProvider care deține datele).

Pentru a fi de folos cu Context.startActivity (), toate clasele de activitate trebuie să aibă o declarație <activity> corespunzătoare în pachetul AndroidManifest.xml.

Fragmente

Un fragment poate reprezenta o porțiune a interfeței sau un comportament de utilizator într-un FragmentActivity. Se pot combina mai multe fragmente într-o singură activitate pentru a crea o interfață UI multiplă și reutiliza un fragment în mai multe activități. Se poate gândi la un fragment ca secțiune modulară a unei activități, care are propriul lanț de viață, primește propriile evenimente de intrare și pe care se pot adăuga sau elimina în timp ce activitatea se desfășoară (un fel de "subactivitate" pe care se poate reutiliza în diferite activități).

Un fragment trebuie neapărat să fie găzduit într-o activitate și lanțul de viață al fragmentului este direct afectat de lanțul de viață al activității gazdă. Spre exemplu, atunci când activitatea este întreruptă, la fel sunt și toate fragmentele din aceasta, iar atunci când activitatea este distrusă, la fel sunt și toate fragmentele. Cu toate acestea, în timp ce o activitate este în desfășurare (este în starea ciclului de viață reluată), se poate acționa fiecare fragment independent, cum ar fi adăugarea sau eliminarea acestora. Atunci când se realizează o astfel de tranzacție cu fragmente, se poate adăuga și ea într-o stivă din spate gestionată de activitate – fiecare intrare în stivă înapoi în activitate este o înregistrare a tranzacției fragmentare care a avut loc. Spatele stivă permite utilizatorului să inverseze o tranzacție fragmentară (navigare înapoi), apăsând butonul Înapoi.

Când se adaugă un fragment ca parte a aspectului activității, acesta trăiește într-un grup de vizualizare din organizarea de vizualizare a activității, iar fragmentul definește propria aparență a vizualizării. Se poate introduce un fragment în aspectul activității prin declararea fragmentului în fișierul de aspect al activității, ca element <fragment> sau din codul aplicației, prin adăugarea acestuia într-o grupă existentă de vizualizare.

Durata ciclului de activitate

Activitățile din sistem sunt gestionate ca o stivă de activități. Atunci când se pornește o nouă activitate, ea este plasată în partea superioară a stivei și devine activă în desfășurare – activitatea anterioară rămâne întotdeauna sub ea în teanc și nu va mai reveni în prim plan până când noua activitate nu va ieși.

Durata ciclului de activitate

Activitățile din sistem sunt gestionate ca o stivă de activități. Atunci când se pornește o nouă activitate, ea este plasată în partea superioară a stivei și devine activă în desfășurare – activitatea anterioară rămâne întotdeauna sub ea în teanc și nu va mai reveni în prim plan până când noua activitate nu va ieși.

O activitate are, în consistență, patru stări:

Dacă o activitate se află în prim-planul ecranului, este în desfășurare sau este activă.

Dacă o activitate a pierdut focalizarea, dar este încă vizibilă, aceasta este întreruptă. O activitate întreruptă este complet vie (menține toate informațiile despre stare și membru și rămâne atașată administratorului de ferestre), dar poate fi închisă de sistem în situații extrem de scăzute de memorie.

Dacă o activitate este ascunsă complet de o altă activitate, aceasta este oprită. Ea încă păstrând toate informațiile despre stre și membru, însă nu mai este vizibil pentru utilizator, astfel încât fereastra sa este ascunsă și adesea va fi închisă de sistem când memoria este necesară în alt loc.

Dacă o activitate este oprită sau întreruptă, sistemul poate să renunțe la activitate din memorie fie prin cererea terminării, fie prin închiderea procesului. Când este afișat din nou utilizatorului, acesta trebuie repornit complet și apoi readus la starea anterioară.

Diagrama următoare prezintă direcțiile de stare importante ale unei activități. Ovalele colorate sunt state majore în care se poate desfășura activitatea. Dreptunghiurile pătrate reprezintă metode de apel invers, pe care le puteți implementa pentru a efectua operațiuni când activitatea se deplasează între state.

Există trei bucle cheie pe care utilizatorii ar putea fi interesați să le monitorizeze în cadrul activității lor:

Durata întreaga de viață a unei activități se cuprinde dintre primul apel la onCreate până la un singur apel final pentru onDestroy. O activitate va face tot setarea stării "globale" în onCreate și va elibera toatalitatea resurselor rămase în onDestroy. De exemplu, dacă are un fir care rulează în fundal pentru a descărca date din rețea, poate crea threadul în onCreate și apoi opri cursul în onDestroy.

Durata de viață vizibilă a unei activități se întâmplă între un apel la start până la un apel corespunzător la onStop. În acest timp, utilizatorul poate vedea activitatea pe ecran, deși este posibil să nu fie în prim-plan și să interacționeze cu utilizatorul. Între aceste două metode puteți menține resursele necesare pentru a arăta activitatea utilizatorului. De exemplu, puteți înregistra un BroadcastReceiver în onStart pentru a monitoriza modificările care influențează interfața dvs. utilizator și pentru a-l dezactiva în funcția onStop atunci când utilizatorul nu mai vede ceea ce afișați. Metodele onStart și onStop pot fi numite de mai multe ori, deoarece activitatea devine vizibilă și ascunsă de utilizator.

Durata de viață a unui activ în prim plan se întâmplă între un apel pentru onResume până la un apel corespunzător pentru onPause. În acest timp, activitatea este în fața tuturor celorlalte activități și interacționează cu utilizatorul. O activitate poate merge frecvent între starea reluată și cea de pauză – de exemplu atunci când dispozitivul trece în starea de repaus, atunci când rezultatul activității este livrat, atunci când este lansat un nou intenție – astfel încât codul din aceste metode ar trebui să fie destul de ușor.

Întregul lanț de viață al unei activități este definit de următoarele metode.. Toate activitățile vor implementa onCreate pentru a realiza configurarea inițială; mulți vor implementa, de asemenea, onPause pentru a comite schimbări de date și pentru a se pregăti pentru a nu mai interacționa cu utilizatorul. Ar trebui să apelați întotdeauna la superclase când implementați aceste metode.

Introducerea activităților și obținerea de rezultate

Metoda startActivity este utilizată pentru a începerea unei activități noi, ce va fi plasată în partea superioară a stivei de activitate. Este nevoie de un argument, un Intent, care descrie activitatea ce trebuie facută.

Uneori se obține un rezultat înapoi de la o activitate când se termină. De exemplu, se poate începe o activitate care permite utilizatorului să aleagă o persoană dintr-o listă de contacte; când se termină, returnează persoana selectată. Pentru a face acest lucru, se apelează versiunea startActivityForResult cu un al doilea parametru întreg care identifică apelul. Rezultatul va reveni prin metoda onActivityResult.

Atunci când o activitate se oprește, poate accesa setResult pentru a returna datele înapoi părintelui său. Trebuie să furnizeze de fiecare dată un cod rezultat, care poate fi rezultatul standard RESULT_CANCELED, RESULT_OK sau orice valoare personalizată începând cu RESULT_FIRST_USER. În plus, poate reveni opțional la intenția care conține orice date suplimentare pe care le dorește. Aceste informații apar înapoi la Activity.onActivityResult () a părintelui, împreună cu identificatorul întregului care a fost inițial furnizat.

Dacă o activitate copil nu reușește din niciun motiv, activitatea părinte va înregistra un rezultat cu codul RESULT_CANCELED.

Salvarea statului persistent

Există, două tipuri de stări persistente decât activitatea de care se ocupă: date partajate de documente (de obicei stocate într-o bază de date SQLite utilizând un furnizor de conținut) și starea internă, spre exemplu preferințele utilizatorilor.

Pentru datele furnizorului de conținut, propunem ca activitățile respective să utilizeze un model de utilizator "editați în loc". Aceasta înseamnă că toate editările pe care le face un utilizator sunt făcute efectiv imediat, fără a necesita un pas suplimentar de confirmare. Sprijinirea acestui model este, în general, o simplă chestiune de urmărire a două reguli:

Când creați un document nou, intrarea din baza de date de suport sau fișierul pentru acesta este creat imediat. De exemplu, în cazul în care utilizatorul alege să scrie un nou e-mail, o nouă înregistrare pentru acel e-mail este creată de îndată ce începe să introducă date, astfel încât în ​​cazul în care aceștia merg la orice altă activitate după acest punct, acest e-mail va apărea acum în lista proiecte.

Atunci când este apelată metoda onPause () a unei activități, ea trebuie să se angajeze către furnizorul de conținut de backing sau să înregistreze toate modificările efectuate de utilizator. Acest lucru asigură că aceste modificări vor fi văzute de orice altă activitate care urmează să fie difuzată. Probabil veți dori să vă angajați datele într-un mod mai agresiv în momente cheie în timpul ciclului de viață al activității: de exemplu, înainte de a începe o nouă activitate, înainte de finalizarea propriei activități, atunci când utilizatorul comută între câmpurile de intrare etc.

Acest model este conceput pentru a preveni pierderea datelor atunci când un utilizator navighează între activități și permite sistemului să omoare în siguranță o activitate (deoarece resursele de sistem sunt necesare în altă parte) în orice moment după ce a fost întreruptă. Rețineți că acest lucru implică faptul că utilizatorul care apasă ÎNAPOI din activitatea dvs. nu înseamnă "anula" – înseamnă să lăsați activitatea cu conținutul curent salvat. Anularea unei editări într-o activitate trebuie furnizată prin intermediul unui alt mecanism, cum ar fi o opțiune explicită "revert" sau "undo".

Consultați pachetul de conținut pentru mai multe informații despre furnizorii de conținut. Acestea sunt un aspect cheie al modului în care diferite activități invocă și propagă date între ele.

Clasa de activitate oferă, de asemenea, un API pentru gestionarea stării interne persistente asociate unei activități. Aceasta poate fi utilizată, de exemplu, pentru a reține afișarea inițială preferată a utilizatorului într-un calendar (vizualizarea zilnică sau săptămâna) sau pagina principală implicită a utilizatorului într-un browser web.

Starea activă persistentă este gestionată prin metoda getPreferences (int), permițându-vă să preluați și să modificați un set de perechi de nume / valoare asociate activității. Pentru a utiliza preferințele care sunt partajate în mai multe componente ale aplicației (activități, receptoare, servicii, furnizori), puteți utiliza metoda Context.getSharedPreferences () pentru a recupera un obiect de preferințe stocat sub un anumit nume. (Rețineți că nu este posibilă partajarea datelor de setări între pachetele de aplicații – pentru că veți avea nevoie de un furnizor de conținut.)

Iată un extras dintr-o activitate de calendar care stochează modul de vizualizare preferat al utilizatorului în setările sale persistente:

Ciclul de viață al procesului

Sistemul Android încearcă să păstreze un proces de aplicare în jurul pentru cât mai mult posibil, dar în cele din urmă va trebui să eliminați procesele vechi atunci când memoria se scurge. După cum este descris în ciclul de viață al activității, decizia cu privire la ce proces de eliminare este legată strâns de starea interacțiunii utilizatorului cu acesta. În general, există patru state pe care poate fi un proces bazat pe activitățile desfășurate în el, enumerate aici în ordinea importanței. Sistemul va ucide procese mai puțin importante (ultimele) înainte de a recurge la uciderea unor procese mai importante (primele).

Activitatea din prim plan (activitatea din partea de sus a ecranului pe care utilizatorul o interacționează în prezent) este considerată cea mai importantă. Procesul său va fi ucis doar ca o ultimă soluție, dacă utilizează mai multă memorie decât este disponibilă pe dispozitiv. În general, în acest moment dispozitivul a atins o stare de paginare a memoriei, deci este necesar pentru a menține interfața utilizatorului receptiv.

activitate vizibilă (o activitate vizibilă de utilizator, dar nu în prim-plan, cum ar fi una care stă în spatele unui dialog din prim-plan) este considerată extrem de importantă și nu va fi ucisă decât dacă este necesară menținerea activității primordiale în desfășurare.

activitate de fundal (o activitate care nu este vizibilă utilizatorului și care a fost întreruptă) nu mai este critică, astfel încât sistemul poate să-și omoare procesul în mod sigur pentru a recupera memoria pentru alte procese primare sau vizibile. Dacă procesul său trebuie să fie ucis, atunci când utilizatorul navighează înapoi la activitate (făcând din nou vizibil pe ecran), metoda onCreate (Bundle) va fi apelată cu savedInstanceState pe care la furnizat anterior în onSaveInstanceState (Bundle) astfel încât se poate reporni în aceeași stare pe care a lăsat-o ultimul utilizator.

Un proces gol este o gazduire fara activitati sau alte componente ale aplicatiei (cum ar fi clasele Service sau BroadcastReceiver). Acestea sunt ucise foarte repede de sistem, pe măsură ce memoria devine scăzută. Din acest motiv, orice operațiune de fundal pe care o efectuați în afara unei activități trebuie să fie executată în contextul unei activități BroadcastReceiver sau Service pentru a vă asigura că sistemul cunoaște necesitatea de a vă menține procesul în jur.

Uneori, o activitate poate necesita o operațiune de lungă durată care există independent de ciclul de viață al activității în sine. Un exemplu poate fi o aplicație de cameră care vă permite să încărcați o imagine pe un site Web. Încărcarea poate dura o perioadă lungă de timp, iar aplicația trebuie să permită utilizatorului să părăsească aplicația în timp ce execută. Pentru a realiza acest lucru, activitatea dvs. ar trebui să înceapă un serviciu în care are loc încărcarea. Acest lucru permite sistemului să prioritizeze corect procesul dvs. (considerând că este mai important decât alte aplicații care nu sunt vizibile) pe durata încărcării, independent de faptul că activitatea inițială este întreruptă, oprită sau terminată.

SQL

SQL (Language Structured Query) pentru gestionarea datelor deținute într-un sistem de gestionare a bazelor de date relaționale (RDBMS) sau pentru prelucrarea fluxurilor într-un sistem de gestionare a fluxului de date relațional (RDSMS). Este utilă în special în manipularea datelor structurate în cazul în care există relații între diferite entități / variabile ale datelor. SQL oferă două avantaje principale față de API-urile mai vechi de citire / scriere precum ISAM sau VSAM: în primul rând, a introdus conceptul de accesare a mai multor înregistrări cu o singură comandă; și în al doilea rând, elimină nevoia de a specifica cum se ajunge la o înregistrare, de ex. cu sau fără un indice.

Inițial bazat pe algebra relațională și calculul relațional al tuplului, SQL constă din mai multe tipuri de instrucțiuni care pot fi clasificate informal ca sublanguage, de obicei: o limbă de interogare a datelor (DQL), [a] [b] un limbaj de control al datelor (DCL) și o limbă de manipulare a datelor (DML) [c]. Domeniul de aplicare al SQL include interogarea datelor, manipularea datelor (inserare, actualizare și ștergere), definirea datelor (crearea și modificarea schemelor) și controlul accesului la date. Deși SQL este adesea descris ca și, într-o mare măsură, este un limbaj declarativ (4GL), el include și elemente de procedură.

SQL a fost una dintre primele limbi comerciale pentru modelul relațional al lui Edgar F. Codd, așa cum este descris în lucrarea sa influentă din 1970, "Un model relațional al datelor pentru băncile mari de date partajate". În ciuda faptului că nu a respectat în întregime modelul relațional descris de Codd, acesta a devenit limbajul de baze de date cel mai răspândit.

SQL a devenit un standard al Institutului Național de Standardizare american (ANSI) în 1986 și al Organizației Internaționale de Standardizare (ISO) în 1987. De atunci, standardul a fost revizuit pentru a include un set mai mare de caracteristici. În ciuda existenței unor astfel de standarde, majoritatea codului SQL nu este complet portabil între diferite sisteme de baze de date fără ajustări.

Instrucțiunea CREATE DATABASE este utilizată pentru a crea o nouă bază de date SQL

Sintaxă

CREATE DATABASE nume data de baze

Următoarea instrucțiune SQL creează o bază de date numită "testDataBase":

CREATE DATABASE testDataBase

Instrucțiunea DROP DATABASE este utilizată pentru a renunța la o bază de date SQL existentă.

DROP DATABASE databasenume

Următoarea instrucțiune SQL elimină baza de date existentă "testDataBase":

DROP DATABASE testDatabase

Instrumentul SQL CREATE TABLE

Sintaxă

Parametrii coloanei specifică numele coloanelor din tabel.

Parametrul datatype specifică tipul de date pe care o poate stoca coloana

SQL CREATE TABLE Exemplu

Coloana PersonID este de tip int și va deține un număr întreg.

Coloanele LastName, FirstName, Address și City sunt de tip varchar și vor conține caractere, iar lungimea maximă pentru aceste câmpuri este de 255 de caractere.

Tabelul gol "Persons" va arăta astfel:

Creați tabelul utilizând alt tabel

O copie a unui tabel existent poate fi creată utilizând o combinație a instrucțiunii CREATE TABLE și a instrucției SELECT.

Noul tabel are aceleași definiții ale coloanei Toate coloanele sau coloanele specifice pot

fi selectate.

Dacă creați o tabelă nouă folosind un tabel existent, tabelul nou va fi completat cu

valorile existente din tabelul vechi.

Sintaxă

Tabelul SQL DROP TABLE

Instrucțiunea DROP TABLE este utilizată pentru a plasa o tabelă existentă într-o bază de date.

Sintaxă

DROP TABLE table_name

Tabelul DROP SQL Exemplu

Următoarea instrucțiune SQL scade tabelul existent "Expeditori"

DROP TABLE Expeditori

TABLE TRUNCATE SQL

Instrucțiunea TRUNCATE TABLE este utilizată pentru a șterge datele dintr-un tabel, dar nu și pentru tabelul propriu-zis.

TRUNCATE TABLE nume_tabel

Instrucțiunea SQL ALTER TABLE

Instrucțiunea ALTER TABLE este utilizată pentru adăugarea, ștergerea sau modificarea coloanelor într-un tabel existent.

Instrucțiunea ALTER TABLE este, de asemenea, utilizată pentru a adăuga și plasa diferite constrângeri pe un tabel existent.

ALTER TABLE – ADD Coloana

Pentru a adăuga o coloană într-un tabel, utilizați următoarea sintaxă:

ALTER TABLE nume_tabel
ADD nume_coloană datatype

ALTER TABLE – Coloana DROP

Pentru a șterge o coloană într-un tabel, utilizați următoarea sintaxă (observați că unele sisteme de bază de date nu permit ștergerea unei coloane):

ALTER TABLE nume_tabel
DROP COLUMN nume_coloană

ALTER TABLE – ALTER / MODIFY COLOANA

Pentru a modifica tipul de date dintr-o coloană într-un tabel, utilizați următoarea sintaxă:

ALTER TABLE nume_tabel
ALTER COLUMN nume_coloană datatype

ALTER TABLE nume_tabel
MODIFY COLUMN nume_coloană datatype

ALTER TABLE nume_tabel
MODIFY nume_coloană datatype

SQL Crearea constrângerilor

Constrângerile pot fi specificate atunci când tabelul este creat cu instrucțiunea CREATE TABLE sau după ce tabelul este creat cu instrucțiunea ALTER TABLE.

Constrângeri SQL

Constrângerile SQL sunt folosite pentru a specifica regulile pentru datele dintr-un tabel.

Constrângerile sunt utilizate pentru a limita tipul de date care pot intra într-un tabel. Aceasta asigură precizia și fiabilitatea datelor din tabel. Dacă există vreo încălcare între constrângere și acțiunea datelor, acțiunea este întreruptă.

Constrângerile pot fi nivel de coloană sau nivel de tabel. Constrângerile la nivel de coloană se aplică unei coloane, iar constrângerile la nivel de tabel se aplică întregului tabel.

SQL NOT NULL Constrângere

Implicit, o coloană poate să dețină valori NULL.

Constrângerea NOT NULL impune o coloană NU acceptă valori NULL.

Aceasta impune ca un câmp să conțină întotdeauna o valoare, ceea ce înseamnă că nu puteți introduce o înregistrare nouă sau nu puteți actualiza o înregistrare fără să adăugați o valoare în acest câmp.

Următorul SQL asigură că coloanele "ID", "LastName" și "FirstName" NU acceptă valori NULL:

SQL UNIQUE Constrângere

Constrângerea UNIQUE asigură că toate valorile dintr-o coloană sunt diferite.

Atât constrângerile UNIQUE cât și PRIMARY KEY oferă o garanție pentru unicitatea unei coloane sau unui set de coloane.

O constrângere PRIMARY KEY are automat o constrângere UNIQUE.

Cu toate acestea, puteți avea mai multe constrângeri UNIQUE per tabel, dar numai o constrângere PRIMARY KEY pe tabel.

SQL UNIQUE Constrângere pe CREATE TABLE

Următorul SQL creează o constrângere UNIQUE în coloana "ID" atunci când este creată tabelul "Persons":

Pentru a numi o constrângere UNIQUE și pentru a defini o constrângere UNIQUE pe mai multe coloane, utilizați următoarea sintaxă SQL:

SQL UNIQUE Constrângere pe ALTER TABLE

Pentru a crea o constrângere UNIQUE în coloana "ID" când tabela este deja creată, utilizați următoarea SQL:

ALTER TABLE Persons
ADD UNIQUE (ID);

Pentru a numi o constrângere UNIQUE și pentru a defini o constrângere UNIQUE pe mai multe coloane, utilizați următoarea sintaxă SQL:

ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);

DROP o constrângere UNIQUE

Pentru a renunța la o constrângere UNIQUE, utilizați următorul SQL:

ALTER TABLE Persons
DROP INDEX UC_Person;

ALTER TABLE Persons
DROP CONSTRAINT UC_Person;

SQL PRIMARY KEY Constrângere

Constrângerea PRIMARY KEY identifică în mod unic fiecare înregistrare într-o tabelă de baze de date.

Cheile primare trebuie să conțină valori UNIQUE și nu pot conține valori NULL.

O tabelă poate avea o singură cheie primară, care poate consta din câmpuri unice sau multiple.

SQL PRIMARY KEY pe CREATE TABLE

Următorul SQL creează un KEY PRIMARY în coloana "ID" atunci când este creată tabelul "Persoane":

Pentru a permite numirea unei constrângeri PRIMARY KEY și pentru a defini o constrângere KEY PRIMARY pe mai multe coloane, utilizați următoarea sintaxă SQL:

SQL PRIMARY KEY pe ALTER TABLE

Pentru a crea o constrângere PRIMARY KEY în coloana "ID" atunci când tabela este deja creată, utilizați următorul SQL:

ALTER TABLE Persons
ADD PRIMARY KEY (ID);

Pentru a permite numirea unei constrângeri PRIMARY KEY și pentru a defini o constrângere KEY PRIMARY pe mai multe coloane, utilizați următoarea sintaxă SQL:

ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

DROP o constrângere PRIMARY KEY

Pentru a renunța la o constrângere PRIMARY KEY, utilizați următorul SQL:

ALTER TABLE Persons
DROP PRIMARY KEY;

ALTER TABLE Persons
DROP CONSTRAINT PK_Person;

Aplicație Android Getae

Pagina principala

Înainte de pagina principală aplicația cere permisiunea de a accesa fotografiile și conținutul media.

Această funcție este folosită de contul de administrator pentru a adauga produse in baza de date firebase a aplicației.

Pentru a cere permisiunea de a accesa fotografiile aplicația are nevoie de următoarele tag-uri adăugate în AndroidManifest.xml

Pentru verificarea permisiunii se creează o funcție hasPermision( ) cu parametrii: context de tip Context și permission de tip String.

Funcția se apelează in metoda onCreate( ). În cazul in care aplicația nu are permisiunea de a folosi imagini, comanda următoare cere aplicației permisiunea pentru a folosi date media din telefon.

Layout-ul paginii principale este alcătuit din 4 ImageButton-uri care reprezintă categoriile produselor din shop. Ele îndrumă utilizatorul la pagina cu subcategoriile produselor.

Aceste imagini sunt introduse într-un LinearLayout cu dimensiunile părintelui/ecranului, iar conținutul acestuia este așezat vertical unul sub celălalt.

Pagina principală conține un drawer in stânga paginii ce poate fi afișat printr-un swipe din stânga către dreapta sau prin apasarea butonului de drawer din ActionBar.

Inițial drawer-ul conține un header si un meniu. În header se află un ImageView pentru afișarea logo-ului magazinului și două TextView-uri: primul pentru stocarea și afișarea numelui de utilizator și al doilea pentru afișarea email-ului utilizatorului logat. În cazul în care utilizatorul nu este logat vor fi afișate in primul text field Username iar în cel de-al doilea email.

Meniul drawer-ului conține 3 grupuri. În primul grup se află 4 iteme dintre care sunt afișate numai 3 în cazul in care utilizatorul nu este logat. Dacă utilizatorul se loghează atunci va apărea item-ul MyOrders. În cel de-al doilea grup se află 3 iteme. Primul item care apare numai când utilizatorul nu este logat este butonul de LogIn. În cazul în care utilizatorul se loghează in aplicație butonul de LogIn își va schimba proprietatea de vizibilitate din true în false, iar în schimbul lui vor apărea alte două butoane: ShoppingCart și LogOut.

În cazul în care utilizatorul logat este un administrator atunci al treilea grup își va schimba proprietatea de vizibilitate în true. Acest grup conține douș iteme: ManageUsers in care va putea vedea sau elimina utilizatorii si ManageProducts în care va putea adăuga produse in baza de date a aplicației.

Codul Xml pentru header-ul drawer-ului

Itemele Drawer-ului

Pagina LogIn

Pentru a putea fi shop-ul folosit utilizatorul trebuie să se logheze. Pagina de LogIn este alcătuită dintr-un ImageView în care se află o imagine cu numele aplicației.

Culoarea background-ului este in RGB: #2a3132.

În acest layout al paginii se mai află un TextInputLayout în care se va introduce email-ul, încă un TextInputLayout în care se va introduce parola utilizatorului, un Button care în urma apăsării verifică conținutul din câmpurile Email și Password. Dacă câmpurile sunt goale atunci va fi afișata pe ecran o avertizare „Fields are empty”. În cazul în care acestea sunt completate aplicația va verifica în baza de date dacă există utilizatorul sau dacă parola este corectă, urmând să logheze utilizatorul. Dacă datele introduse nu corespund cu datele din baza de date aplicația va afișa avertizarea „Wrong Email or Password”.

În această pagină se mai află un TextView cu text-ul : „ No account yet? Create one” care va îndruma utilizatorul să își creeze un cont (în cazul în care acesta nu are cont deja(ceea ce poate fi foarte probabil deoarece acesta este singurul mod in care utilizatorul poate crea un cont…am uitat sa introduc un buton de Register pe pagina principala in drawer.<dummy text to fill pages>)).

În urma apăsării butonului de LogIn aplicația va verifica in baza de date existența utilizatorului prin următoarea secvență de cod:

După executarea acestei funcții AuthStateListener-ul va schimba pagina dacă utilizatorul logat nu este null, adică dacă utilizatorul s-a logat cu succes.

Pagina Register

În cazul în care utilizatorul nu este înregistrat în baza de date acesta trebuie să își creeze un cont cu ajutorul paginii Register.

Această pagină este alcatuită din:

ImageView – Getae

TextInputEditText – Name

TextInputEditText – Email

TextInputEditText – Password

TextInputEditText – Confirm Password

Button – Register

TextView – Already a member? Login

În aceste cămpuri se introduc datele respective iar apoi în urma apăsării butonului Register se creeaza contul în baza de date. În cazul în care câmpul numelui utilizatorului este gol aplicația va afișa pe ecran în Snackbar „Enter the username”.

În cazul în care câmpul Email este gol se va afișa pe ecran „Enter the email”. Dacă email-ul introdus nu este în format de email ex: test@gmail.com, se v-a afișa „Enter Valid Email”.

În cazul în care câmpul Password este gol se va afișa pe ecran „Enter the password”. Dacă parola nu conține un număr mai mare sau egal de 6 caractere sau un număr mai mic sau egal de 16 caractere atunci se va afișa „Password must be 6 to 16 characters in length”.

În cazul în care în campul ConfirmPassword textul introdus este diferit de textul din câmpul Password [ if(!password.equals(confirm_password)) ] atunci se va afișa mesajul „Password does not matches”.

Dacă toate restricțiile au fost evitate atunci aplicația va încerca să creeze un cont cu datele introduse. În cazul în care funcția de creare a contului nu va duce operația la bun sfârșit atunci singurul motiv posibil pentru nereușita ar fi că acel cont există deja în baza de date a aplicației.

Dacă crearea contului a fost un succes atunci aplicația va trimite utilizatorul în pagina principală modificând datele corespunzător. Ultima opțiune posibilă pe această pagină ar fi în cazul în care utilizatorul are deja cont și dorește să se logheze atunci apăsând pe text-ul „Already a member? Login” aplicația va schimba pagina din Register în pagina Login.

Pagina ManageUsers

Dacă utilizatorul logat este admin acesta poate accesa pagina Manage Users în care vor fi afișați toți utilizatorii care și-au făcut cont pe această aplicație. Aici adminul poate elimina din utilizatori.

Pagina este alcătuită dintr-un header în care se află trei TextView-uri. În primul se află titlul „Getae Hub” în al doilea TextView se află mesajul de bun venit „Hello,” iar cel de-al treilea TextView conține emailul adminului logat.

Pe lângă header pagina conține un ListView care este populat de celule care conțin utilizatorii din baza de date și datele lor: Name, Emai, Password.

Pagina ManageProducts

Pagina Manage Products conține:

TextView cu textul „Add Product”

Button – „ADD A CLOTHING ITEM”

Button – „ADD AN ACCESSORY”

Prin apăsarea butonului ADD A CLOTHING ITEM se va schimba pagina în Add a Clothing Item

Prin apăsarea butonului ADD AN ACCESSORY se va schimba pagina în Add an Accessory Item.

Pagina Add a Clothing Item

Cu ajutorul acestei pagini adminul poate adăuga un nou produs vestimentar. Această pagină este alcătuită dintr-un RelativeLayout ce conține un ImageView cu aceleași dimensiuni ca și layout-ul, și două TextView-uri. Unul pentru „+” și unul

pentru „Add Photo”. În momentul ce poza a fost adăugată (ImageView-ul își schimbă imaginea), cele două TextView-uri își schimbă vizibilitatea in false. Permisiunile cerute de aplicație la începutul acesteia sunt necesare pentru a putea selecta imaginea produsului din telefon.

Pagina mai conține un TextView ce conține textul: „Add name and description”, două EditText-uri, unul pentru nume cu hint-ul Name și unul pentru descrierea produsului cu hint-ul Description.

În continuarea EditTextului cu descriere se află un TextView cu textul: „Select Category and Subcategory”. Sub acesta într-un LinearLayout se află un RadioGroup cu două butoane radio Male si Female ce reprezintă categoriile. Pentru categoria Accessories există o altă pagină modificată corespunzător pentru a nu conține dimensiuni. După selectarea categoriei Spinerul de lângă RadioGroup va fi populat de subcategoriile respective categoriei alese.

Între RadioGroup și Spinner se află un View cu lățimea de 1dp (density pixel), culoare grey_light (#E0E0E0) și o margine de 5dp.

Acest view ține rolul de bară de separare între categorii și subcategorii.

Sub acest LinearLayout se află un TextView cu textul: „Insert Price and Stock”.

Sub acest TextView se află un EditText cu hintul „Prince” în care va trebui introdus prețul produsului, iar lângă acesta se află un TextView ce reprezintă tipul de valută. Acestea sunt separate printr-un view de lațime de 1dp de un LinearLayout în care se află câte un CheckBox pentru fiecare dimensiune posibilă. În același rând cu acestea se află câte un EditText cu hint-ul „0” în care va fi introdus numărul pe stoc al acelei dimensiuni.

CheckBox-urile de pe prima coloană

Și EditText-urile respective

Analog pentru celelalte două coloane unde se află încă 3 CheckBox-uri cu dimensiunile: L, XL, XXL, si inca 3 EditText-uri ce corespund acestor dimensiuni.

În finalul acestei pagini se află un Button cu textul „ADD”, cu care toate datele introduse vor fi adăugate în baza de date.

În situația în care:

ImageView-ul nu conține nici o imagine aplicația va afișa „Insert a Picture”

TextView-ul cu nume nu conține nimic aplicația va afișa „Insert a Name”

TextView-ul cu descrierea nu conține nimic aplicația va afișa „Insert a description”

Nu este selectat vre-un RadioButton cu categoria aplicația va afișa „Choose a Category”

Nu este selectată subcategoria din Spinner (!pentru a apărea lista cu subcategorii trebuie aleasă categoria produsului) aplicația va afișa „Choose a Subcategory”

EditText-ul cu preș nu conșine nimic atunci aplicația va afișa „Insert Price”

În cazul în care nu este selectată nici o dimensiune din listă aplicația va afișa „De ce vrei să adaugi un produs dacă acesta nu e pe stoc!!!”

În cazul în care este selectată o dimensiune și în EditText-ul corespunzător nu este introdus nimic atunci baza de date nu va memora dimensiunea respectivă ca fiind pe stoc

În cazul în care este completat EditText-ul corespunzator al unui CheckBox neselectat atunci datele dimensiunii selectate nu va intra in baza de date.

Pagina Add an Accessory Item

A doua opțiune din pagina Manage Products este ADD AN ACCESSORY. Acest buton va trimite utilizatorul în pagina Add an Accessory Item.

Layout-ul acestei pagini este asemănător cu layout-ul paginii de mai sus Add a Clothing Item.

Diferența dintre această pagină și cea menționată mai sus este lipsa alegerii categoriei deoarece categoria prestabilită a acestei pagini este Accessory. În schimb Spinnerul afișează direct subcategoriile categoriei Accessory.

Sub Preț este adăugat un nou EditText cu hint-ul Stock în care se va introduce numărul produselor pe stock.

Shopping Cart

Shopping cartul se poate accesa din ecranul principal fie din dreapta ActionBar-ului, fie dacă utilizatorul este logat din meniul drawer-ului.

În cazul în care utilizatorul a accesat pagina Shopping Cart și nu a adăugat nici un produs în coș atunci pagina Shopping Cart va afișa un Linear Layout cu:

Un ImageView cu imaginea cart-ului

Un TextView care va afișa „Your Cart is empty!”

Un Button cu textul SHOP NOW care va trimite utilizatorul în pagina principală de unde poate alege categoria pentru a achiziționa un produs.

În cazul în care utilizatorul este logat și acesta are adăugat în coș produse, atunci LinearLayout-ul anterior va dispărea iar în schimb va apărea o lista cu produsele adăugate in coș, iar în jos-ul escranului va apărea un LinearLayout ce va afișa prețul final într-un TextView și încă un TextView cu textul Purchase care va confirma comandă și o va trece în baza de date yOrders.

Acest cod Xml reprezintă bara de jos cu textul payment în care va fi afișat prețul produselor din coș și înca un TextView cu textul Payment care în urma accesării sale produsele vor fi introduse în baza de date.

Pagina va fi populată de produse afisate în forma următorului layout:

ImageView cu imaginea produsului din baza de date

TextView în care se va afișa numele produsului din baza de date

TextView în care va fi afișată descrierea produsului

TextView în care se va afișa prețul produsului

TextView în care va fi afișată cantitatea selectată de utilizatori a produsului

TextView în care va fi afișată dimensiunea selectată de utilizator în cazul în care produsul respectiv are o dimensiune (exemplu: accesoriile nu au dimensiuni diferite ele venind într-un format universal în baza de date)

Un LinearLayout în care vor fi afișate un ImageView cu imaginea „X” și un Text view cu textul „Remove”.

În urma accesării layout-ului produsul va fi eliminat din listă.

MyOrders

Pagina MyOrders este alcătuită dintr-un LinearLayout asemănător cu cel al paginii ShoppingCart. Conține un layout centrat în care se află un ImageView cu imaginea unui shopping cart, un TextView ce cuprinde textul „Your Orders List is empty !” și un Button cu textul „Shop Now” care în urma accesării trimite utilizatorul în pagina principală de cumparaturi.

Acest layout este utilizat în mare parte în momentul în care un utilizator și-a creeat contul sau în cazul în care acesta nu a făcut nici o comandă. În urma efectuării unei comenzi layout-ul va dispărea și in schimb vor fi afișate toate comenzile efectuate de către acest utilizator.

În cazul în care utilizatorul logat a efectuat comenzi, aceste comenzi vor apărea listate într-un RecyclerView iar layout-ul anterior va dispărea de pe ecran.

Listarea comenzilor se va face populând RecyclerView-ul cu datele comenzilor din baza de date a utilizatorului în următorul layout.

Acest layout este alcătuit din:

TextView cu textul „Order Number:”

TextView cu textul „Date:”

TextView cu textul „Price:”

TextView cu textul „Items:”

Pe lângă aceste TextView-uri se va afla încă o coloană cu câte un TextView pentru afișarea numărului comenzii (numarul comenzii la nivelul întregului shop), data în care a fost efectuată comanda, prețul comenzii și produsele achiziționate de către cumpărator.

SubcategoryPage

Pagina SubcategoryPage afișează subcategoriile fiecărei categorii principale. Layout-ul acestei pagini este unul simplu alcătuit dintr-un ListView cu lațimea și lungimea egală cu conținutul paginii.

În urma apăsării pe unul dintre itemele aflate în ListView aplicația va intra în ProductsListPage în care vor fi afișate produsele cu subcategoria aleasă respectiv.

În pagina ProductListPage se află un GridView ce conține iteme cu un layout (product_list_cell) ce conține :

Un ImageView în care va fi inițializată imaginea produsului respectiv

Un LinearLayout ce conține :

Un TextView în care se va inițializa numele

Un TextView în care se va inițializa descrierea produsului

Un View de lățime 1dp pentru a despărți descrierea de preț

Un TextView în care va fi inițializat prețul

În urma alegerii unui produs din listă aplicația va accesa pagina ProductPage.

ProductPage

Pagina următoare are rolul de a arăta produsul în detaliu și oferă opțiunea de a cumpăra produsul respectiv sau de a-l adăuga in coș.

Pagina este alcătuită dintr-un ImageView în care se va inițializa imaginea din baza de date. Acest ImageView are dimensiunile de 250dp lațime si 250dp inălțime, un background de culoare #E0E0E0 și două margini în stânga și deasupra imaginii cu dimensiunea 10dp.

Sub acesta se află un TextView în care va fi afișat numele produsului. Acest TextView are dimensiunile egale cu conținutul lui (text). Marginea este egală cu 10dp, dimensiunea textului este de 21sp (scale pixel) și acesta conține un padding în stânga și în dreapta de 10dp.

Sub acest TextView se află un LinearLayout care la rândul lui este alcătuit din alte două LinearLayout-uri. Layout-ul din stânga conține un TextView în care va fi introdusă descrierea produsului din baza de date. Sub acesta se află un TextView pentru inițializarea prețului de culoare roșie(#ff6060).

Între layout-ul din stânga și cel din dreapta se află un View cu rolul de a separa layout-urile.

În layout-ul din dreapta se află un TextView cu textul „Quantity”, în continuarea acestuia se află un Button cu textul „-” ce are rolul de a scădea numărul produselor din TextView-ul următor. În continuarea TextView-ului se află încă un Button cu textul „+” ce are rolul de a mări numărul produselor din TextView.

Sub acest layout se află un TextView ce conține textul „Size” iar în continuarea lui se află un Spinner în care vor fi afișate mărimile produselor (dacă produsul are dimensiuni diferite). În jos-ul paginii se află un LinearLayout cu înălțimea de 45dp și proprietatea weightSum egală cu 100 pentru a delimita proporțional dimensiunile butoanelor care se află în el.

Primul buton are rolul de a adăuga produsele în coș și permite continuarea navigării prin shop iar cel de-al doilea trimite utilizatorul direct în coș pentru a finaliza achiziția.

Similar Posts