====== Colocviu 2 ====== ===== Model de Subiect =====
{{url>http://eim2016.andreirosucojocaru.ro/_media/colocvii/colocviu02/eim2016-tp02-varsim.pdf 90%,800px}}
{{ :colocvii:colocviu02:eim2016-tp02-varsim.pdf }} ===== Observații Generale ===== Pentru rezolvarea subiectelor propuse în cadrul colocviului 2, sunt necesare: * un cont Github personal, pe care să existe drepturi de citire și de scriere; * SDK-ul de Android (cu o imagine pentru nivelul de API 16 - Jelly Bean 4.1); * mediul de dezvoltare integrat Android Studio sau Eclipse, împreună cu plugin-ul Android Developer Tools; * un dispozitiv mobil: * fizic (bring your own device); * virtual: Genymotion, AVD. În situația în care lucrați pe calculatoarele din laboratorul Ixia (EG106) este recomandat să folosiți: * fluxbox ca utilitar pentru gestiunea ferestrelor (se alege din interfața de autentificare); * epiphany pentru navigare Internet. Este de preferat să nu se depășească memoria disponibilă, întrucât comportamentul acestor mașini este imprevizibil în momentul în care se folosește swap-ul (se blochează, fără posibilitatea de recuperare din eroare). În situația în care este necesară procesarea codului sursă (în format HTML) al paginii Internet furnizat ca răspuns la cererea transmisă către un serviciu web, se poate folosi [[http://jsoup.org/packages/jsoup-1.9.1.jar|biblioteca Jsoup]]. Integrarea sa în mediul integrat pentru dezvoltare **Android Studio 1.5.1** se face prin plasarea fișierului corespunzător în directorul //libs// al proiectului. Ulterior, din meniul contextual al aplicației Android (accesibil prin click dreapta) se accesează opțiunea //Open Module Settings// sau se apasă tasta F4. {{ :colocvii:colocviu02:androidstudio_library01.png?nolink }} În fereastra //Project Structure// se apasă tasta //+// pentru a se specifica un modul nou. {{ :colocvii:colocviu02:androidstudio_library02.png?nolink&600 }} În fereastra //Create New Module// se indică tipul de modul //Import .JAR/.AAR Package//. {{ :colocvii:colocviu02:androidstudio_library03.png?nolink&600 }} Se precizează: * locația la care se găsește biblioteca ce va fi importată sub formă de modul; * denumirea subproiectului din care va face parte modulul; {{ :colocvii:colocviu02:androidstudio_library04.png?nolink&600 }} După ce biblioteca a fost integrată în cadrul mediului integrat pentru dezvoltare Android Studio 1.5.1, aceasta va putea fi vizualizată în fereastra //Project Structure//. {{ :colocvii:colocviu02:androidstudio_library05.png?nolink&600 }} Integrarea sa în mediul integrat pentru dezvoltare **Eclipse Mars 1 (4.5.1)** se face prin plasarea fișierului corespunzător în directorul //libs// al proiectului. Acesta devine vizibil în momentul în care se accesează operația //Refresh// din meniul contextual, disponibilă și prin tasta //F5//. Ulterior, pentru a fi inclus în classpath, este necesar ca din meniul contextual asociat fișierului ''jsoup-1.9.1.jar'' (disponibil pe butonul drept al mouse-ului) să se acceseze //Build Path// → //Add to Build Path//. {{ :colocvii:colocviu02:eclipse_library01.png?nolink }} După ce biblioteca a fost integrată în cadrul mediului integrat pentru dezvoltare Eclipse Mars 1 (4.5.1), aceasta va putea fi vizualizată în secțiunea //Referenced Libraries// din proiectul corespunzător. {{ :colocvii:colocviu02:eclipse_library02.png?nolink }} În situația în care este necesară procesarea unui document JSON furnizat ca răspuns la cererea transmisă către un serviciu web, se vor utiliza clasele [[http://developer.android.com/reference/org/json/JSONObject.html|JSONObject]], respectiv [[http://developer.android.com/reference/org/json/JSONArray.html|JSONArray]], din cadrul SDK-ului Android. Pentru vizualizare, se poate folosi utilitarul [[http://jsonformatter.curiousconcept.com/|JSON Formatter & Validator]], prin care structura documentului JSON poate fi inspectată cu ușurință. ===== Rezolvări ===== Proiectele Android Studio și Eclipse corespunzătoare aplicației Android ce conține rezolvările complete ale cerințelor colocviului sunt disponibile pe [[https://github.com/eim2016/PracticalTest02|contul de Github al disciplinei]]. **1.** Se accesează [[https://www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. {{ :colocvii:colocviu01:github_authentication.png?nolink&700 }} Se creează o zonă de lucru corespunzătoare unui proiect prin intermediului butonului //New Repository//. {{ :colocvii:colocviu02:github_new_repository.png?nolink }} Configurarea depozitului la distanță presupune specificarea: * unei denumiri; * unei descrieri (opțional); * tipului de director (public sau privat - doar contra cost!!!); * modului de inițializare: * local, prin ''git init''; * la distanță, prin ''git clone'' - depozitul la distanță nu trebuie să fie vid, în această situațoe * unui fișier ''README'' (opțional); * extensiilor ignorate (corespunzătoare limbajului de programare folosit, în cazul de față - Android) - incluse în fișierul ''.gitignore''; * tipului de licență sub care este publicat codul sursă. {{ :colocvii:colocviu02:github_repository_configuration.png?nolink }} **2.** Prin intermediul comenzii ''git clone'' se poate descărca întregul conținut în directorul curent (de pe discul local), inclusiv istoricul complet al versiunilor anterioare (care poate fi ulterior reconstituit după această copie, în cazul coruperii informațiilor stocate pe serverul la distanță). În situația în care se dorește clonarea conținutului din depozitul la distanță în alt director decât cel curent, acesta poate fi transmis ca parametru al comenzii, după URL-ul la care poate fi accesat proiectul în Github. student@eim2016:~$ git clone https://www.github.com/perfectstudent/PracticalTest02 **3.** Se urmăresc indicațiile disponibile în secțiunea [[laboratoare:laborator01#crearea_unei_aplicatii_android_in_eclipse_mars_1_451_-_obligatoriu|Crearea unei aplicații Android în Eclipse Mars 1 (4.5.1)]], respecti [[laboratoare:laborator01#crearea_unei_aplicatii_android_in_android_studio_151_-_obligatoriu|Crearea unei aplicații Android în Android Studio 1.5.1]]. **4.** Pentru implementarea interfeței grafice, se vor defini controalele care asigură interacțiunea cu utilizatorul pentru fiecare dintre componentele aplicației Android: * serverul * un câmp text pentru specificarea portului pe care va accepta conexiuni de la clienți; * un buton pentru lansarea în execuție; * clientul * câmpuri text pentru precizarea parametrilor de conexiune la server: * adresa Internet (se va folosi ''localhost'' sau ''127.0.0.1''); * port; * elemente grafice pentru indicarea informațiilor solicitate: * un câmp text pentru oraș; * o listă populată cu datele meteorologice care se doresc a fi furnizate (//temperature//, //wind_speed//, //condition//, //pressure//, //humidity//, //all//); ca alternativă, se poate folosi tot un câmp text, cu restricția ca valorile introduse să facă parte din mulțimea acceptată; * un buton pentru trimiterea cererii și primirea răspunsului, condiționată de completarea anterioară a tuturor celorlalte informații. Nu este necesar ca în dezvoltarea interfeței grafice să se utilizeze elemente grafice complexe (de tipul fragmentelor sau listelor). Nu este punctat nici aspectul estetic al acesteia. Tot ce contează este ca interfața grafică să poată fi utilizată pentru implementarea cerințelor funcționale. {{ :colocvii:colocviu02:graphic_interface01.png?nolink&400 }}