This shows you the differences between two versions of the page.
eim:laboratoare:laborator07 [2018/04/12 15:12] dragos.niculescu |
eim:laboratoare:laborator07 [2021/02/16 16:06] (current) dragos.niculescu |
||
---|---|---|---|
Line 353: | Line 353: | ||
Pentru utilizarea bibliotecii Volley este necesar să se realizeze următoarele operații: | Pentru utilizarea bibliotecii Volley este necesar să se realizeze următoarele operații: | ||
- descărcarea codului sursă de la depozitul unde este întreținută <code> | - descărcarea codului sursă de la depozitul unde este întreținută <code> | ||
- | student@eim2017:~$ git clone https://www.github.com/google/volley | + | student@eim-lab:~$ git clone https://www.github.com/google/volley |
</code> | </code> | ||
- referirea proiectului ca bibliotecă în Android Studio | - referirea proiectului ca bibliotecă în Android Studio | ||
Line 867: | Line 867: | ||
* ''username'' - denumirea utilizatorului care deține drepturi de acces asupra acestui serviciu web (în cazul de față, ''pdsd''). | * ''username'' - denumirea utilizatorului care deține drepturi de acces asupra acestui serviciu web (în cazul de față, ''pdsd''). | ||
- | **Exemplu**. O adresă Internet de la care pot fi accesate rezultate în format JSON este: [[http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=eim2017|]]. | + | **Exemplu**. O adresă Internet de la care pot fi accesate rezultate în format JSON este: [[http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=eim-lab|]]. |
Rezultatele sunt furnizate în următorul format: | Rezultatele sunt furnizate în următorul format: | ||
Line 936: | Line 936: | ||
<code> | <code> | ||
- | student@eim2017:~$ git clone https://www.github.com/eim-lab/Laborator07.git | + | student@eim-lab:~$ git clone https://www.github.com/eim-lab/Laborator07.git |
</code> | </code> | ||
**3.** Să se încarce conținutul descărcat în cadrul depozitului 'Laborator07' de pe contul Github personal. <code> | **3.** Să se încarce conținutul descărcat în cadrul depozitului 'Laborator07' de pe contul Github personal. <code> | ||
- | student@eim2017:~$ cd Laborator07 | + | student@eim-lab:~$ cd Laborator07 |
- | student@eim2017:~/Laborator07$ git remote add Laborator07_perfectstudent https://github.com/perfectstudent/Laborator07 | + | student@eim-lab:~/Laborator07$ git remote add Laborator07_perfectstudent https://github.com/perfectstudent/Laborator07 |
- | student@eim2017:~/Laborator07$ git push Laborator07_perfectstudent master | + | student@eim-lab:~/Laborator07$ git push Laborator07_perfectstudent master |
</code> | </code> | ||
**4.** Să se importe în mediul integrat de dezvoltare Android Studio proiectul ''CalculatorWebService'' din directorul ''labtasks''. | **4.** Să se importe în mediul integrat de dezvoltare Android Studio proiectul ''CalculatorWebService'' din directorul ''labtasks''. | ||
+ | |||
+ | https://ocw.cs.pub.ro/courses/_media/eim/laboratoare/laborator07/calculatorwebservice.zip | ||
**4a.** Să se verifice în browser funcționarea serverului [[http://wi-fi.cs.pub.ro/~dniculescu/didactic/eim/expr/|serverului]] pentru GET și POST | **4a.** Să se verifice în browser funcționarea serverului [[http://wi-fi.cs.pub.ro/~dniculescu/didactic/eim/expr/|serverului]] pentru GET și POST | ||
+ | **4b.** Să se verifice la linia de comandă functionarea severului | ||
+ | * <code shell> curl -X POST --data 'operation=times&t1=9&t2=2' https://wi-fi.cs.pub.ro/~dniculescu/didactic/eim/expr/expr_post.php</code> | ||
+ | * <code shell> curl "https://wi-fi.cs.pub.ro/~dniculescu/didactic/eim/expr/expr_get.php?operation=times&t1=9&t2=2" </code> | ||
- | **4b.** studiați implementarea serverului în php | + | **4c.** studiați implementarea serverului în php |
| | ||
- | **4c.** Se cere să se implementeze un calculator, care suportă operațiile de adunare/scădere/înmulțire/împărțire a două numere reale, pe baza rezultatului furnizat de un serviciu web, accesibil prin HTTP, la adresele Internet specificate în interfața ''Constants'', pentru fiecare dintre metodele suportate pentru transmiterea informațiilor: | + | **4d.** Se cere să se implementeze un calculator, care suportă operațiile de adunare/scădere/înmulțire/împărțire a două numere reale, pe baza rezultatului furnizat de un serviciu web, accesibil prin HTTP, la adresele Internet specificate în interfața ''Constants'', pentru fiecare dintre metodele suportate pentru transmiterea informațiilor: |
* ''GET'': ''Constants.GET_WEB_SERVICE_ADDDRESS'' | * ''GET'': ''Constants.GET_WEB_SERVICE_ADDDRESS'' | ||
* ''POST'': ''Constants.POST_WEB_SERVICE_ADDRESS'' | * ''POST'': ''Constants.POST_WEB_SERVICE_ADDRESS'' | ||
Line 1016: | Line 1021: | ||
</code> | </code> | ||
* obținerea caricaturii, pe baza adresei Internet la care este găzduită, se face prin fluxul de intrare corespunzător entității HTTP, care va fi decodificat prin intermediul metodei [[http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeStream(java.io.InputStream)|BitmapFactory.decodeStream()]], care întoarce un obiect de tip [[http://developer.android.com/reference/android/graphics/Bitmap.html|Bitmap]]; asocierea unui astfel de obiect ca sursă a unui control grafic ce tip ''ImageView'' se face prin intermediul metodei [[http://developer.android.com/reference/android/widget/ImageView.html#setImageBitmap(android.graphics.Bitmap)|setImageBitmap()]]; | * obținerea caricaturii, pe baza adresei Internet la care este găzduită, se face prin fluxul de intrare corespunzător entității HTTP, care va fi decodificat prin intermediul metodei [[http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeStream(java.io.InputStream)|BitmapFactory.decodeStream()]], care întoarce un obiect de tip [[http://developer.android.com/reference/android/graphics/Bitmap.html|Bitmap]]; asocierea unui astfel de obiect ca sursă a unui control grafic ce tip ''ImageView'' se face prin intermediul metodei [[http://developer.android.com/reference/android/widget/ImageView.html#setImageBitmap(android.graphics.Bitmap)|setImageBitmap()]]; | ||
+ | <spoiler> | ||
+ | <code java> | ||
+ | Element divTagIdCtitle = htmlTag.getElementsByAttributeValue(Constants.ID_ATTRIBUTE, Constants.CTITLE_VALUE).first(); | ||
+ | xkcdCartoonInformation.setCartoonTitle(divTagIdCtitle.ownText()); | ||
+ | |||
+ | |||
+ | Element divTagIdComic = htmlTag.getElementsByAttributeValue(Constants.ID_ATTRIBUTE, Constants.COMIC_VALUE).first(); | ||
+ | String cartoonInternetAddress = divTagIdComic.getElementsByTag(Constants.IMG_TAG).attr(Constants.SRC_ATTRIBUTE); | ||
+ | String cartoonUrl = Constants.HTTP_PROTOCOL + cartoonInternetAddress; | ||
+ | xkcdCartoonInformation.setCartoonUrl(cartoonUrl); | ||
+ | </code> | ||
+ | </spoiler> | ||
+ | ===== Opțional (request cu Volley) ===== | ||
<spoiler> | <spoiler> | ||
* alternativ, se poate folosi biblioteca open-source Volley, care pune la dispoziție un obiect specializat pentru descărcarea de imagini și încărcarea acestora în controalele din cadrul interfeței grafice (''ImageRequest''): <code java> | * alternativ, se poate folosi biblioteca open-source Volley, care pune la dispoziție un obiect specializat pentru descărcarea de imagini și încărcarea acestora în controalele din cadrul interfeței grafice (''ImageRequest''): <code java> | ||
Line 1043: | Line 1061: | ||
</code> | </code> | ||
</spoiler> | </spoiler> | ||
+ | |||
+ | |||
* obținerea adreselor Internet corespunzătoare caricaturilor anterioară, respectiv următoare, care vor fi asociate obiectului ascultător ce tratează evenimentul de tip apăsare al butonului aferent; se poate realiza o căutare după eticheta ''<a>'' care deține un atribut ''rel'' cu valoarea ''prev'', respectiv ''next'', folosind metoda ''getElementsByAttributeValue()''); URL-ul reprezintă valoarea atributului ''href'', furnizată de metoda ''attr'': <code java> | * obținerea adreselor Internet corespunzătoare caricaturilor anterioară, respectiv următoare, care vor fi asociate obiectului ascultător ce tratează evenimentul de tip apăsare al butonului aferent; se poate realiza o căutare după eticheta ''<a>'' care deține un atribut ''rel'' cu valoarea ''prev'', respectiv ''next'', folosind metoda ''getElementsByAttributeValue()''); URL-ul reprezintă valoarea atributului ''href'', furnizată de metoda ''attr'': <code java> | ||
Element aTagRelPrev = htmlTag.getElementsByAttributeValue(Constants.REL_ATTRIBUTE, Constants.PREVIOUS_VALUE).first(); | Element aTagRelPrev = htmlTag.getElementsByAttributeValue(Constants.REL_ATTRIBUTE, Constants.PREVIOUS_VALUE).first(); | ||
Line 1100: | Line 1120: | ||
<note important> | <note important> | ||
- | Atenție, site-ul xkcd a trecut la https, ceea ce pornește un [[https://stackoverflow.com/questions/29916962/javax-net-ssl-sslhandshakeexception-javax-net-ssl-sslprotocolexception-ssl-han|bug]] din Android < 5.0, deci pentru rulare trebuie să folosiți o imagine de Android cu versiune mai nouă decât ce este în prezent în EG106 (4.4.x) | + | Atenție, site-ul xkcd a trecut la https, ceea ce pornește un [[https://stackoverflow.com/questions/29916962/javax-net-ssl-sslhandshakeexception-javax-net-ssl-sslprotocolexception-ssl-han|bug]] din Android < 5.0, deci pentru rulare trebuie să folosiți o imagine de Android cu versiune mai nouă decât Lollipop. |
</note> | </note> | ||
Line 1134: | Line 1154: | ||
**7.** (opțional) Să se importe în mediul integrat de dezvoltare Android Studio proiectul ''LandmarkLister'' din directorul ''labtasks''. | **7.** (opțional) Să se importe în mediul integrat de dezvoltare Android Studio proiectul ''LandmarkLister'' din directorul ''labtasks''. | ||
- | Se cere să se implementeze o aplicație Android care să afișeze informații cu privire la obiectivele turistice dintr-un areal geografic (desemnat prin coordonatele nord, sud, est, vest) pe baza rezultatelor furnizate de serviciul web [[http://http://api.geonames.org/citiesJSON|Geonames Paces]]. | + | Se cere să se implementeze o aplicație Android care să afișeze informații cu privire la obiectivele turistice dintr-un areal geografic (desemnat prin coordonatele nord, sud, est, vest) pe baza rezultatelor furnizate de serviciul web [[http://api.geonames.org/citiesJSON|Geonames Paces]]. |
Detaliile care se doresc a fi vizualizate pentru fiecare obiectiv turistic în parte sunt: | Detaliile care se doresc a fi vizualizate pentru fiecare obiectiv turistic în parte sunt: | ||
Line 1225: | Line 1245: | ||
**8.** Să se încarce modificările realizate în cadrul depozitului 'Laborator07' de pe contul Github personal, folosind un mesaj sugestiv. <code> | **8.** Să se încarce modificările realizate în cadrul depozitului 'Laborator07' de pe contul Github personal, folosind un mesaj sugestiv. <code> | ||
- | student@eim2017:~/Laborator07$ git add * | + | student@eim-lab:~/Laborator07$ git add * |
- | student@eim2017:~/Laborateclior07$ git commit -m "implemented taks for laboratory 07" | + | student@eim-lab:~/Laborateclior07$ git commit -m "implemented taks for laboratory 07" |
- | student@eim2017:~/Laborator07$ git push Laborator07_perfectstudent master | + | student@eim-lab:~/Laborator07$ git push Laborator07_perfectstudent master |
</code> | </code> | ||
Line 1246: | Line 1266: | ||
[[http://en.wikipedia.org/wiki/JSON|Formatul JSON]]\\ | [[http://en.wikipedia.org/wiki/JSON|Formatul JSON]]\\ | ||
[[http://developer.android.com/reference/org/json/JSONObject.html|JSONObject]] | [[http://developer.android.com/reference/org/json/JSONObject.html|JSONObject]] | ||
+ | ====Android Developer Fundamentals==== | ||
+ | [[https://docs.google.com/presentation/d/176imWmYy31qcCpkkk0mhx66LKrlhrCZPHGfEn9tBZlE/edit#slide=id.g116d7d9d49_3_13|Internet Connection]] |