Sunteți pe pagina 1din 9

Lista subiectelor la disciplina ”Programarea aplicațiilor mobile„

Android
1. Noțiunea de Activity
Activitatea reprezintă o componenta a aplicației Android ce oferă o interfață grafică cu care utilizatorul poate să
interacționeze. Cele mai multe activități ocupă întreaga suprafață de afișare, însă acest lucru nu este obligatoriu.

2. Activity Lifecycle
Din momentul în care activitatea este creată și până la momentul în care este distrusă, ea trece printr-o serie de etape, cunoscute
sub denumirea de ciclul de viață al activității:
▪ în execuție (eng. running) - activitatea se află în prim plan și este vizibilă, astfel încât utilizatorul poate interacționa cu
aceasta prin intermediul interfeței grafice pe care o oferă;
▪ întreruptă temporar (eng. paused) - activitatea se află în fundal și este (parțial) vizibilă;
▪ oprită (eng. stopped) - activitatea se află în fundal și este complet ascunsă;
▪ inexistentă - activitatea a fost terminată sau distrusă de sistemul de operare, rularea sa impunând crearea tuturor
componentelor sale ca și când ar fi accesată inițial.
Tranziția unei activități dintr-o stare în alta este notificată prin intermediul unor metode (callbacks), care pot fi rescrise pentru
a realiza diferite operații. Aceste metode sunt:
• onCreate(Bundle) – este apelată în momentul în care activitatea este creată.
• onRestart() - apelată după ce activitatea a fost repornită, este urmată întotdeauna de metoda onStart();
• onStart() - apelată în momentul în care ativitatea apare pe ecran; poate fi urmată de metoda onResume() sau onPause();
• onResume() - apelată înainte de reluarea execuției activității, este urmată întotdeauna de metoda onPause();
• onPause() - apelată înainte ca activitatea să piardă focus-ul evenimentelor, poate fi urmată de metoda onResume() sau de
metoda onStop(). Este singura metodă care este apelată în mod garantat înainte de a elibera memoria utilizată de activitate;
• onStop() - apelată în momentul în care activitatea este ascunsă, fereastra devenind invizibilă, poate fi urmată de metoda
onRestart(), dacă activitatea urmează să devină din nou vizibilă sau de metoda onDestroy() dacă activitatea urmează să fie
terminată și eliminată din memorie;
• onDestroy() - apelată înainte ca activitatea să se termine și să fie eliminată din memorie.

3. Process lifecycle -

4. Structura Intent-lui
Intenția este mecanismul de comunicare între elementele unei aplicații Android (activități și servicii). Comunicarea se
realizează asincron (nu este blocată sistemul în așteptarea răspunsului) iar informațiile sunt încapsulate în obiectele de tip
intenție.
În structura unei intenții pot fi identificate mai multe elemente, precizate în cadrul secțiunii  <intent-filter>, prin
intermediul cărora se declară faptul că o componentă a unei aplicații poate realiza o anumită acțiune pentru un anumit set de date
(sau pe care un ascultător al unei intenții cu difuzare îl poate procesa):
▪ acțiunea (action) care trebuie executată este indicată prin proprietatea android:name, cele mai frecvent utilizate valori
fiind: MAIN, VIEW, DIAL, CALL, ANSWER, SEND, SENDTO, INSERT, EDIT, DELETE, SEARCH, WEB_SEAR
CH; fiecare filtru de intenție trebuie să indice cel puțin o acțiune;
▪ categoria (category), indicată tot prin proprietatea android:name oferă informații suplimentare cu privire la acțiunea
care trebuie realizată; fiecare filtru de intenție poate specifica mai multe categorii, putând fi utilizate valori definite de
utilizator sau valori preexistente în sistemul de operare Android:
▪ ALTERNATIVE - acțiunea ar trebui să fie disponibilă ca o alternativă la activitatea implicită pentru tipul de date
respectiv;
▪ SELECTED_ALTERNATIVE - acțiunea poate fi selectată, dintr-o listă, ca o alternativă la activitatea implicită
pentru tipul de date respectiv;
▪ BROWSABLE - indică o acțiune disponibilă din cadrul navigatorului; pentru ca o activitate sau un serviciu să poată
fi invocate din cadrul navigatorului trebuie să specifice în mod obligatoriu această categorie;
▪ DEFAULT - utilizat pentru ca activitatea sau serviciul să fie utilizate în mod implicit pentru tipul de date specificat
în filtrul de intenții; de asemenea, este necesar pentru activitățile sau serviciile care se doresc a fi lansate în execuție
prin intermediul unor intenții explicite;
▪ HOME - este folosit pentru a indica o alternativă la ecranul principal, dacă nu este indicată nici o acțiune;
▪ LAUNCHER - atunci când este specificat, face ca activitatea să fie inclusă în meniul de aplicații care pot fi lansate
în execuție direct de către utilizator, prin accesarea lor;
▪ alte valori: INFO, PREFERENCE, CAR_DOCK, DESK_DOCK, CAR_MODE, APP_MAKET.
▪ datele (data) reprezință informațiile care vor fi procesate, fiind exprimate de obicei sub forma unui  URI, fie că este
vorba despre un număr de telefon (prefixat de tel:), despre datele unei persoane din lista de contacte (prefixate
de content://contacts/people), despre coordonate geografice (prefixate de geo:) sau o adresă Internet (prefixată
de http://www.);
▪ tipul (type) referă în mod explicit clasificarea MIME al datelor (deși aceasta poate fi dedus în mod automat din
conținutul propriu-zis al datelor respective);
▪ componenta (component) specifică în mod explicit denumirea unei clase care va fi invocată de intenție (deși aceasta
putea fi dedusă în mod automat din denumirea acțiunii și categoria ei, datele și tipul lor);
▪ extra (extra) este un obiect de tip Bundle care conține informații suplimentare cu privire la componenta respectivă;
Dintre aceste componente, esențiale sunt acțiunea și datele: acțiunea este transmisă ca parametru al constructorului
clasei Intent; datele sunt transmise prin intermediul metodei setData() (pentru acțiunile care necesită date); fiind vorba despre
un URI, acesta va fi construit ca rezultat al Uri.parse(…).

5. Intent resolution (explicit intent / implicit intent)

Implicit Intents do not directly specify the Android components which should be called, it only specifies action to be performed.
A Uri can be used with the implicit intent to specify the data type.

for example
Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));

Explicit intents are used in the application itself wherein one activity can switch to other activity...
Example Intent intent = new Intent(this,Target.class); this causes switching of activity from current context to the target
activity. Explicit Intents can also be used to pass data to other activity using putExtra method and retrieved by target activity
by getIntent().getExtras() methods.

6. Intenții cu difuze

Există și tipuri particulare de intenții cu difuzare:


1. intenții cu difuzare ordonate, utile în situația în care o intenție cu difuzare trebuie să fie procesată secvențial de mai mulți
ascultători, fiecare dintre aceștia având posibilitatea de a modifica intenția respectivă;
2. intenții cu difuzare persistente, care mențin valoarea care a fost transmisă cel mai recent.

7. Structura unui Serviciu


În Android, clasa android.app.Service este utilizată pentru componente a căror funcționalitate implică procesări
complexe, de lungă durată, necesitând acces la anumite resurse, fără a fi necesar să pună la dispoziție o interfață grafică sau un
mecanism de interacțiune cu utilizatorul. Prin intermediul unui serviciu, se asigură faptul că aplicația Android continuă să se
găsească în execuție, chiar și atunci când interfața grafică a acesteia nu este vizibilă.
Se observă faptul că ciclul de viață al unui serviciu are loc între metodele onCreate() și onDestroy(). De cele mai multe
ori, este necesar ca un serviciu să folosească unul sau mai multe fire de execuție (dedicate) astfel încât să nu influențeze
responsivitatea aplicației Android.
Într-o astfel de situație, firul de execuție va fi pornit pe metoda onCreate() și va fi oprit pe metoda onDestroy(). De
asemenea, în cadrul metodei onCreate() au loc diferite operații de configurare (inițializări), în timp ce în cadrul metodei
onDestroy() realizează eliberarea resurselor folosite. Metodele onCreate() și onDestroy() sunt invocate pentru toate tipurile de
servicii, atât pentru cele de tip started, cât și pentru cele de tip bounded.
În cazul unui serviciu de tip started, perioada activă din ciclul de viață este cuprinsă între apelul metodei
onStartCommand() (apelată în mod automat atunci când o componentă apelează metoda startService(), primind ca argument
obiectul de tip Intent care a fost folosit la invocarea sa) și apelul metodei onDestroy() (apelat atunci când serviciul este oprit, prin
intermediul uneia dintre metodele stopSelf() sau stopService()).
În cazul unui serviciu de tip bounded, perioada activă din ciclul de viață este cuprinsă între apelul metodei onBind()
(apelată în mod automat atunci când o componentă apelează metoda bindService(), primind ca argument obiectul de tip Intent
care a fost folosit la invocarea sa) și apelul metodei onUnbind() (apelată în mod automat atunci când toate componentele asociate
serviciului au apelat metoda unbindService()).
8. AlarmManager
Această clasă oferă acces la serviciile de alarmă ale sistemului. Acestea vă permit să programați aplicația pentru a fi rulată la
un moment dat în viitor. Când se declanșează o alarmă, intenția care a fost înregistrată pentru aceasta este difuzată de sistem,
pornind automat aplicația țintă dacă nu este deja rulată. Alarmele înregistrate sunt reținute în timp ce dispozitivul este adormit
(și poate opțional să trezească dispozitivul dacă se sting în timpul respectiv), dar vor fi șterse dacă este oprit și repornit.
Managerul de alarmă deține o blocare de stopare a procesorului atâta timp cât se execută metoda onReceive() a receptorului de
alarmă. Acest lucru garantează că telefonul nu va dormi până nu ați terminat de gestionat transmisia. Odată ce revine
onReceive(), Managerul de alarmă eliberează această blocare de stopare. Aceasta înseamnă că, în unele cazuri, telefonul va
dormi de îndată ce metoda dvs. onReceive() se finalizează. Dacă receptorul dvs. de alarmă se numește
Context.startService(), este posibil ca telefonul să stea înainte de lansarea serviciului solicitat. Pentru a preveni acest lucru,
receptorul și serviciul dvs. Broadcast va trebui să implementeze o politică separată de blocare a trezirii pentru a se asigura că
telefonul continuă să ruleze până când serviciul devine disponibil.

9. AlarmManager
Aplicațiile Android pot trimite sau primi mesaje difuzate din sistemul Android și alte aplicații Android, similar modelului de
proiectare publicare-abonare. Aceste transmisii sunt trimise atunci când are loc un eveniment de interes. De exemplu, sistemul
Android trimite transmisii atunci când apar diferite evenimente ale sistemului, cum ar fi atunci când sistemul pornește sau
dispozitivul începe să se încarce. Aplicațiile pot trimite, de asemenea, transmisii personalizate, de exemplu, pentru a notifica
alte aplicații despre ceva care ar putea fi interesat de ele (de exemplu, au fost descărcate unele date noi).
Aplicațiile se pot înregistra pentru a primi difuzări specifice. Când este trimisă o transmisie, sistemul direcționează automat
transmisiile către aplicațiile care s-au abonat pentru a primi acel tip special de difuzare.
În general, transmisiile pot fi utilizate ca sistem de mesagerie în aplicații și în afara fluxului normal de utilizatori. Cu toate
acestea, trebuie să aveți grijă să nu abuzați de oportunitatea de a răspunde la emisiuni și de a rula lucrări în fundal care pot
contribui la o performanță lentă a sistemului.

10. Android Manifest


acest fișier XML conține descrierea aplicației, ce activități, servicii include sau ce permisiuni necesită aplicația pentru a rula.

11. Runnable și Handlers (proprietăți și mecanisme)


A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each
Handler instance is associated with a single thread and that thread's message queue.

The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class
must define a method of no arguments called run.

This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For
example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet
been stopped.

12. Interfețe și clase abstracte


Folosim o clasă abstractă atunci când vrem:
♣ sa implementăm doar unele din metodele din clasă
♣ ca respectiva clasă să nu poată fi instanțiată
Folosim o interfață atunci când vrem:
♣ să avem doar o descriere a structurii, fără implementări
♣ ca interfața în cauză să fie folosită împreună cu alte interfețe în contextul moștenirii

Dorim să stabilim interfaţa comună pentru a putea crea funcţionalitate diferită pentru fiecare subtip și pentru a ști ce anume au
clasele derivate în comun. O clasă cu caracteristicile enumerate mai sus se numește abstractă.
Creăm o clasă abstractă atunci când dorim să:
♣ manipulăm un set de clase printr-o interfaţă comună
♣ reutilizăm o serie metode si membrii din această clasă in clasele derivate.

Interfeţele duc conceptul abstract un pas mai departe. Se poate considera că o interfaţă este o clasă abstractă pură: permite
programatorului să stabilească o “formă” pentru o clasă (numele metodelor, lista de argumente, valori întoarse), dar fară nicio
implementare.
O interfaţă poate conţine câmpuri dar acestea sunt în mod implicit static și final. Metodele declarate în interfață sunt în mod
implicit public. Interfaţa este folosită pentru a descrie un contract între clase: o clasă care implementează o interfaţă va
implementa metodele definite în interfaţă. Astfel orice cod care folosește o anumită interfaţă știe ce metode pot fi apelate pentru
aceasta.

Windows Phone
13. Noțiunea de View/Interfață
În cadrul unei aplicații Android, o interfață grafică conține elemente care au capabilitatea de a afișa informații către
utilizator, în diferite formate, respectiv de a interacționa cu acesta, preluând datele necesare realizării diverselor fluxuri
operaționale din cadrul aplicației.
Clasa android.view.View reprezintă baza pentru construirea oricărei interfețe grafice dintr-o aplicație Android. Ea
definește o zonă rectangulară a dispozitivului de afișare (ecran) și oferă mecanismul de bază utilizat de majoritatea
controalelor grafice.
Componentele vizuale ale activitatii sunt construite folosind obiecte de tip ViewGroup si View.
● Clasa View este parintele pentru o ierarhie mare de controale vizuale, widget-uri, cum ar fi textbox-uri, checkbox-uri,
butoane, ….
● Clasa ViewGroup este baza pentru o ierarhie de layout-uri, folosite pentru a gestiona colectii de widget-uri si pentru a
defini arhitectura interfetei (liniara, relativa, tabelara).

14. XAML (mod de utilizare / componente)


Pentru fiecare activitate se va construi un fișier .xml în directorul res/layout care va descrie conținutul interfeței grafice precum
și modul de dispunere al controalelor componente.
Let's make a small list of some of the view components:
● TextView: To add some text in your application.
● EditText: This is used when you want to take some input from the users.
● ImageView: To add some image in the application.
● ProgressBar: To show the progress to something. For example, the loading screen.
● Button: are used to trigger some action on the click of the button. It can be starting a new activity or something else.
● ImageButton: It is used to make a clickable image.
● CheckBox: is used to select some options out of many available options.
● DatePicker: To select some particular date.

15. UI Obj Events (tipuri si caracteristici)


Toate obiectele Android de tip View pot fi referențiate în mod unic dacă li se asociază identificatori sub formă de numere
întregi. Următoarea secvență xml permite asocierea de identificatori unici elementelor de tip UI: android: id="@+id/elem_UI.
Subșirul @+id indică compilatorului să creeze o nouă resursă de tip View; pentru exemplul de mai sus numele acestuia
este elem_UI. Toate aceste componente de tip xml declarate sunt incluse într-un fișier cu numele R.java generat automat în
etapa de compilare. Acest fișier permite mai apoi asocierea resurselor grafice codului Java.
Elementele UI astfel declarate pot fi referite în cod prin folosirea de instrucțiuni de tipul: Class obiect_UI = (Class)
findViewById(R.id.elem_UI); Elementele de tip UI asociate tastelor programabile (meniuri) sau obiecte Android de tip
Spinner pot fi declarate de asemenea în fișiere xml; în cazul definirii unui meniu de tip pop-up fișierul xml trebuie să fie
distinct.

16. Layouts (structura si componente)


Controalele de tip ”layout” pentru gestiunea mecanismului de dispunere a conținutului sunt derivate din clasa
android.view.ViewGroup, definind mai multe reguli prin care se determină poziția la care vor fi plasate componentele pe care
le include.
- Linear Layout
- Relative Layout
- Web view

17. Tipuri de interfețe și operații asupra lor

18. Navigation events


Navigation refers to the interactions that allow users to navigate across, into, and back out from the different pieces of
content within your app.

19. Content template

20. Layout și evenimente

21. Diff grid option

22. Storyboard (animation property)

23. Colectii de date (Collection<T>)

24. WebClient vs HttpWebRequest


HTTP (Hypertext Transfer Protocol) este un protocol de comunicație responsabil cu transferul de hipertext (text structurat
ce conține legături) dintre un client (de regulă, un navigator) și un server web, interacțiunea dintre acestea (prin
intermediul unei conexiuni TCP persistente pe portul 80) fiind reglementată de RFC 2616.
Principalele concepte cu care lucrează acest protocol sunt cererea și răspunsul.
 cererea este transmisă de client către serverul web și reprezintă o solicitare pentru obținerea unor resurse (identificate
printr-un URL); aceasta conține denumirea metodei care va fi utilizată pentru transferul de informații, locația de unde se
găsește resursa respectivă și versiunea de protocol;
 răspunsul este transmis de serverul web către client, ca rezultat al solicitării primite, incluzând și o linie de stare (ce
conține un cod care indică dacă starea comenzii) precum și alte informații suplimentare

General
25. Structura unei aplicații (conform platformei alese)
O aplicație Android poate conține mai multe componente:
1. contextul reprezintă punctul central al unei aplicații Android, oferind acces către mai multe funcționalități ale acesteia
(inclusiv la resursele dizpozitivului mobil, serviciile sistemului de operare, diferite fișiere de configurare); este instanțiat
sub forma unui obiect de tip android.app.Application;
2. activitatea realizează sarcini a căror execuție nu influențează timpul de răspuns al aplicației Android, astfel încât să nu
aibă un impact asupra experienței utilizatorului; de aceea, este asociată unei ferestre (interfețe grafice), o aplicație
Android fiind formată din una sau mai multe activități;
3. fragmentul conține interfața grafică și logica aplicației corespunzătoare unei părți din cadrul unei activități; motivul
pentru care se recurge la modularizarea unei activități prin intermediul a mai multor fragmente este asigurarea
consistenței și flexibilității aplicației Android pe mai multe echipamente mobile, cu dispozitive de afișare de dimensiuni
și rezoluții diferite;
4. serviciul încapsulează procese mai complexe, executate în fundal (și posibil la intervale de timp regulate) a căror rulare
durează o perioadă de timp semnificativă, astfel încât să nu poată fi plasate în cadrul aceluiași fir de execuție ca și
interfața grafică prin care se asigură interacțiunea cu utilizatorul;
5. intenția este mecanismul de comunicare între elementele unei aplicații Android (activități și servicii); prin intermediul
unui sistem de mesagerie (asincronă), sistemul de operare Android mapează o solicitare (împachetată sub forma unei
intenții) către componenta adecvată.

26. Operatii asupra Serviciilor (conform platformei alese)

27. Metode Asynchrone (async/await)


* Sarcinile asincrone folosesc:
1. Parame, parametri care sunt trimiși sarcinii la executare.
2. Progres, unitățile de progres care sunt publicate în timpul calculului de fundal.
3. Rezultat, rezultatele calculului de fundal.
* Când o sarcină asincronă este executată, sarcina parcurge 4 pași:
1. onPreExecute : pas folosit pentru a configura sarcina
2. doInBackground : un pas utilizat pentru îndeplinirea sarcinii efective
3. onProgressUpdate : un pas utilizat pentru actualizarea stării de progres curente a sarcinii care se execută în doInBackground
4. onPostExecute : odată ce doInBackground termină execuția sarcinii, acest pas livrează rezultatul înapoi la firul principal al UI
și oprește procesul AsyncTask

28. AsyncTask and Threads


Prin intermediul clasei AsyncTask se permite mutarea operațiilor costisitoare din punct de vedere al utilizării procesorului
și al memoriei pe fire de execuție rulate în fundal, oferind sincronizarea cu firul de execuție ce randează interfața grafică, acesta
fiind notificat cu privire la progresul realizat cât și cu privire la momentul în care procesarea a fost terminată. O implementare a
clasei AsyncTask poate fi parametrizată cu tipurile de date care sunt folosite pentru intrare, pentru raportarea progresului și pentru
ieșire (rezultate).

29. Noțiunea de Context


contextul reprezintă punctul central al unei aplicații Android, oferind acces către mai multe funcționalități ale acesteia
(inclusiv la resursele dizpozitivului mobil, serviciile sistemului de operare, diferite fișiere de configurare); este instanțiat sub
forma unui obiect de tip android.app.Application;
Lucrurile care implică context sunt:
1. Încărcarea unei resurse.
2. Lansarea unei noi activități.
3. Crearea de vizualizări.
4. obținerea serviciului de sistem.

30. Interfete si Clase Abstracte


● Folosim o clasă abstractă atunci când vrem:
♣ sa implementăm doar unele din metodele din clasă
♣ ca respectiva clasă să nu poată fi instanțiată
● Folosim o interfață atunci când vrem:
♣ să avem doar o descriere a structurii, fără implementări
♣ ca interfața în cauză să fie folosită împreună cu alte interfețe în contextul moștenirii

Dorim să stabilim interfaţa comună pentru a putea crea funcţionalitate diferită pentru fiecare subtip și pentru a ști ce anume au
clasele derivate în comun. O clasă cu caracteristicile enumerate mai sus se numește abstractă.
Creăm o clasă abstractă atunci când dorim să:
♣ manipulăm un set de clase printr-o interfaţă comună
♣ reutilizăm o serie metode si membrii din această clasă in clasele derivate.

Interfeţele duc conceptul abstract un pas mai departe. Se poate considera că o interfaţă este o clasă abstractă pură: permite
programatorului să stabilească o “formă” pentru o clasă (numele metodelor, lista de argumente, valori întoarse), dar fară nicio
implementare.
O interfaţă poate conţine câmpuri dar acestea sunt în mod implicit static și final. Metodele declarate în interfață sunt în mod
implicit public. Interfaţa este folosită pentru a descrie un contract între clase: o clasă care implementează o interfaţă va
implementa metodele definite în interfaţă. Astfel orice cod care folosește o anumită interfaţă știe ce metode pot fi apelate pentru
aceasta.

31. Protocolul HTTP


HTTP (Hypertext Transfer Protocol) este un protocol de comunicație responsabil cu transferul de hipertext (text
structurat ce conține legături) dintre un client (de regulă, un navigator) și un server web, interacțiunea dintre acestea (prin
intermediul unei conexiuni TCP persistente pe portul 80) fiind reglementată de RFC 2616. HTTP este un protocol fără stare,
pentru persistența informațiilor între accesări fiind necesar să se utilizeze soluții adiacente (cookie, sesiuni, rescrierea URL-urilor,
câmpuri ascunse).
Principalele concepte cu care lucrează acest protocol sunt cererea și răspunsul.
▪ cererea este transmisă de client către serverul web și reprezintă o solicitare pentru obținerea unor resurse (identificate
printr-un URL); aceasta conține denumirea metodei care va fi utilizată pentru transferul de informații, locația de unde se
găsește resursa respectivă și versiunea de protocol;
▪ răspunsul este transmis de serverul web către client, ca rezultat al solicitării primite, incluzând și o linie de stare (ce
conține un cod care indică dacă starea comenzii) precum și alte informații suplimentare
În Android, comunicația dintre un server web si un client poate fi gestionată prin intermediul clasei HttpURLConnection, care
pune la dispoziție aceleași funcționalități ca în cazul Java SE.
O aplicație ce utilizează această clasă presupune implementarea următoarelor etape:
1. instanțierea unui obiect URL prin intermediul căruia pot fi obținute informații cu privire la resursa respectivă (protocolul
utilizat, mașina pe care se găsește resursa respectivă, portul pe care poate fi accesată, fișierul accesat, referința
vizualizată):
 getProtocol() - furnizează protocolul utilizat, în acest caz, http;
 getHost() - indică adresa mașinii care găzduiește resursa respectivă;
 getPort() - întoarce portul pe care s-a realizat comunicația:
 valoarea -1 este specifică pentru situația în care nu s-a precizat un port în mod explicit;
 valoarea 80 este transmisă numai în cazul în care aceata este specificată ca atare în adresa furnizată.
 getFile() - specifică calea de la care este obținută resursa;
 getRef() - precizează referința din cadrul paginii HTML (de regulă, de tip ancoră) care a fost solicitată.
2. deschiderea unei conexiuni, printr-un apel al metodei openConnection(); metoda întoarce un obiect de
tip URLConnection care poate fi convertit la HttpURLConnection prin care se oferă acces la:
 antetele de cerere: setRequestMethod(), setRequestProperty(String, String);
 antetele de răspuns, inclusiv linia de stare: getResponseCode(), getHeaderFields(), getResponseMessage();
 informații referitoare la mecanismele de gestiune a stării (cookie-uri) - în condițiile în care HTTP este un protocol
fără stare; se utilizează clasele CookieManager, CookieHandler, care gestionează la nivelul întregii mașini virtuale
obiectele de tipul HttpCookie.
3. utilizarea unui flux de intrare / flux de ieșire pentru transferul de informații; se folosesc, obiectele / metodele:
 BufferedInputStream / getInputStream();
 BufferedOutputStream / getOutputStream() - în acest caz, trebuie apelată metoda setDoOutput() cu
parametrul true, împreună cu metodele care evită reținerea conținutului într-o zonă tampon (consumând astfel
memorie inutilă și având un impact asupra latenței):
 setFixedLengthStreamingMode() - atunci când dimensiunea conținutului este cunoscută în prealabil;
 setChunkedStreamingMode() - atunci când dimensiunea conținutului nu este cunoscută
4. închiderea conexiunii, prin intermediul metodei disconnect().
Implicit, clasa HttpURLConnection folosește metoda GET. Metoda POST este utilizată numai în situația în care a fost
apelată în prealabil metoda setDoOutput(true).
Celelalte metode (OPTIONS, HEAD, PUT, DELETE, TRACE) pot fi utilizate numai în situația în care sunt specificate explicit
ca parametru al funcției setRequestMethod().
32. Metodele și cîmpurile prot. HTTP
Metode http
1. GET: este cea mai folosită metodă, fiind utilizată atunci când serverului i se cere o resursă.
2. HEAD: se comportă exact ca metoda GET, dar serverul returnează doar antetul resursei, ceea ce permite clientului să
inspecteze antetul resursei, fără a fi nevoit să obțină și corpul resursei.
3. PUT: metoda este folosită pentru a depune documente pe server, fiind inversul metodei GET.
4. POST: a fost proiectată pentru a trimite date de intrare către server.
5. DELETE: este opusul metodei PUT.
6. TRACE: este o metodă folosită de obicei pentru diagnosticare, putând da mai multe informații despre traseul urmat de
legătura HTTP, fiecare server proxy adăugându-și semnătura în antetul Via.
7. OPTIONS: este folosită pentru identificarea capacităților serverului Web, înainte de a face o cerere.
8. CONNECT: este o metodă folosită în general de serverele intermediare

31. XML/Json (metode de serializare/deserializare)


În Android este suportat formatul JSON strict, așa cum este descris pe http://json.org/:
 denumirile de atribute trebuie să se găsească între ghilimele;
 valorile de tip șir de caractere trebuie să se găsească între ghilimele (nu sunt permise apostroafele în acest caz).
Gestiunea obiectelor JSON se face:
 pentru citire, prin intermediul metodelor de tip get(String name), care furnizează un obiect generic (de tip Object), aceasta
fiind supraîncărcată și pentru tipurile boolean, double, int, long, String, JSONObject, JSONArray;
 pentru scriere, prin intermediul metodelor de tip put(String name, Object value), care furnizeză un rezultat de
tip JSONObject, existând și implementări specifice pentru tipurile boolean, double, int, long.
Dimensiunea unui obiect JSONObject, reprezentat sub forma numărului de asocieri de tip (cheie, valoare) este furnizat de
metoda length().
Reprezentarea unui obiect JSON sub forma unui șir de caractere poate fi obținută prin intermediul metodelor:
 toString() - formă compactă;
 toString(int indentSpaces) - formă utilizată în scop de depanare
33. noțiuni generale și moduri de utilizare RegEX
Expresiile regulate sunt șiruri speciale de caractere care reprezintă un șablon (model) de căutare. De asemenea cunoscute că
“regex” sau “regexp”, acestea ajută programatorii să potrivească, să caute și să înlocuiască texte.
Cu ajutorul expresiilor regulate poţi găsi sau înlocui anumite părţi dintr-un text. Sunt o metodă puternică de verificare pentru
validitatea adreselor de e-mail, domenii de internet sau coduri poştale. Un e-mail valid trebuie să se muleze pe un model prestabilit.
Cu RegEx putem verifica dacă o adresă e-mail se mulează sau nu se mulează pe respectivul model. Deasemenea cu ajutorul
expresiilor regulate putem să analizăm fişiere tot mai mari de text în căutarea informaţiilor dorite.

33. HTML parsing/xPath

XPath is a major element in the XSLT standard. XPath can be used to navigate through elements and attributes in an XML
document.

Parsarea e o metoda de a optimiza artificial un program atunci cand volumul datelor de intrare este foarte mare(se poate face si in
cazul unui volum redus de date de intrare dar nu este recomandat deoarece nu o sa se simta vreo diferenta dintre timpii de rulare).

L.s. Antohi Ionel

S-ar putea să vă placă și