Differences

This shows you the differences between two versions of the page.

Link to this comparison view

eim:laboratoare:laborator07 [2018/04/12 11:54]
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''​.
-***4a.*** Să se verifice în browser funcționarea serverului [[http://eim2017.andreirosucojocaru.ro/exemple/laboratoare/laborator07/calculator/calculator_get.php|serverului]] + 
-cu GET. +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 
 + 
 +**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>​  
 + 
 +**4c.** studiați implementarea serverului în php 
   ​   ​
-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 962: Line 970:
  
 <​code>​ <​code>​
-operation = addition|substraction|multiplication|division +operation = plus|minus|divide|times 
-operator1 ​= număr real +t1 = număr real 
-operator2 ​= număr real+t2 = număr real
 </​code>​ </​code>​
  
Line 1013: 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 1040: 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 1090: Line 1113:
  
 Lansarea în execuție a unui obiect de tip ''​AsyncTask''​ se realizează printr-un apel al metodei ''​execute()'':​ Lansarea în execuție a unui obiect de tip ''​AsyncTask''​ se realizează printr-un apel al metodei ''​execute()'':​
 +
  
 <code java> <code java>
 new XKCDCartoonDisplayerAsyncTask().execute(Constants.XKCD_INTERNET_ADDRESS);​ new XKCDCartoonDisplayerAsyncTask().execute(Constants.XKCD_INTERNET_ADDRESS);​
 </​code>​ </​code>​
 +
 +<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 Lollipop.  ​
 +</​note>​
 +
    * Nu clickați aici decât dupa ce ați rezolvat exercițiul:​ [[https://​xkcd.com/​1174/​|mandatory recursive reference]] ​ m(     * Nu clickați aici decât dupa ce ați rezolvat exercițiul:​ [[https://​xkcd.com/​1174/​|mandatory recursive reference]] ​ m( 
  
Line 1125: 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 1216: 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 1237: 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]]
eim/laboratoare/laborator07.1523523265.txt.gz · Last modified: 2018/04/12 11:54 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0