Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator07 [2016/04/15 03:23]
Andrei Roșu-Cojocaru [Exemplu]
laboratoare:laborator07 [2017/02/20 20:54] (current)
Line 953: Line 953:
 Operația care se dorește a fi efectuată precum și metoda prin care vor fi transmise informațiile către serviciul web vor putea fi selectate prin intermediul unor liste. Operația care se dorește a fi efectuată precum și metoda prin care vor fi transmise informațiile către serviciul web vor putea fi selectate prin intermediul unor liste.
  
-{{ :​laboratoare:​laborator07:​calculatorwebservice.png?​nolink&​400 }}+{{ :​laboratoare:​laborator07:​05calculatorwebservice.png?​nolink&​400 }}
  
 Parametrii ce trebuie incluși în cadrul cererii HTTP sunt: Parametrii ce trebuie incluși în cadrul cererii HTTP sunt:
Line 993: Line 993:
 Se cere să se implementeze o aplicație Android care afișează, într-un control grafic de tip ''​ImageView'',​ cea mai recentă caricatură de pe pagina Internet [[http://​www.xkcd.com|xkcd]]. De asemenea, va putea fi vizualizat titlul acestei caricaturi, adresa Internet la care aceasta poate fi accesată precum și butoane de legătură către caricatura precedentă,​ respectiv caricatura următoare (în situația în care aceasta există). Se cere să se implementeze o aplicație Android care afișează, într-un control grafic de tip ''​ImageView'',​ cea mai recentă caricatură de pe pagina Internet [[http://​www.xkcd.com|xkcd]]. De asemenea, va putea fi vizualizat titlul acestei caricaturi, adresa Internet la care aceasta poate fi accesată precum și butoane de legătură către caricatura precedentă,​ respectiv caricatura următoare (în situația în care aceasta există).
  
-{{ :​laboratoare:​laborator07:​xkcdcartoondisplayer.png?​nolink&​400 }}+{{ :​laboratoare:​laborator07:​06xkcdcartoondisplayer.png?​nolink&​400 }}
  
 Pentru realizarea aplicației,​ vor trebui urmați următorii pași: Pentru realizarea aplicației,​ vor trebui urmați următorii pași:
Line 1002: Line 1002:
   * obținerea titlului caricaturii (se poate realiza o căutare după eticheta ''<​div>''​ care deține un atribut ''​id''​ cu valoarea ''​ctitle'',​ folosind metoda [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​getElementsByAttributeValue%28java.lang.String,​%20java.lang.String%29|getElementsByAttributeValue()]]);​ ulterior, se va prelua conținutul acestei etichete prin intermediul metodei [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​ownText()|ownText()]]:​ <code java>   * obținerea titlului caricaturii (se poate realiza o căutare după eticheta ''<​div>''​ care deține un atribut ''​id''​ cu valoarea ''​ctitle'',​ folosind metoda [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​getElementsByAttributeValue%28java.lang.String,​%20java.lang.String%29|getElementsByAttributeValue()]]);​ ulterior, se va prelua conținutul acestei etichete prin intermediul metodei [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​ownText()|ownText()]]:​ <code java>
 Element divTagIdCtitle = htmlTag.getElementsByAttributeValue(Constants.ID_ATTRIBUTE,​ Constants.CTITLE_VALUE).first();​ Element divTagIdCtitle = htmlTag.getElementsByAttributeValue(Constants.ID_ATTRIBUTE,​ Constants.CTITLE_VALUE).first();​
-xkcdCartoonInfo.setCartoonTitle(divTagIdCtitle.ownText());​+xkcdCartoonInformation.setCartoonTitle(divTagIdCtitle.ownText());​
 </​code>​ </​code>​
   * obținerea URL-ului imaginii care trebuie afișată (se poate realiza o căutare după eticheta ''<​div>''​ care deține un atribut ''​id''​ cu valoarea ''​comic'',​ folosind metoda ''​getElementsByAttributeValue()''​);​ aceasta conține la rândul ei un element ''<​img>''​ care poate fi accesat prin intermediul metodei [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​getElementsByTag%28java.lang.String%29|getElementsByTag()]];​ adresa Internet a caricaturii este reprezentată de valoarea atributului ''​src'',​ furnizată de metoda [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​attr%28java.lang.String,​%20java.lang.String%29|attr()]]:​ <code java>   * obținerea URL-ului imaginii care trebuie afișată (se poate realiza o căutare după eticheta ''<​div>''​ care deține un atribut ''​id''​ cu valoarea ''​comic'',​ folosind metoda ''​getElementsByAttributeValue()''​);​ aceasta conține la rândul ei un element ''<​img>''​ care poate fi accesat prin intermediul metodei [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​getElementsByTag%28java.lang.String%29|getElementsByTag()]];​ adresa Internet a caricaturii este reprezentată de valoarea atributului ''​src'',​ furnizată de metoda [[http://​jsoup.org/​apidocs/​org/​jsoup/​nodes/​Element.html#​attr%28java.lang.String,​%20java.lang.String%29|attr()]]:​ <code java>
Line 1008: Line 1008:
 String cartoonInternetAddress = divTagIdComic.getElementsByTag(Constants.IMG_TAG).attr(Constants.SRC_ATTRIBUTE);​ String cartoonInternetAddress = divTagIdComic.getElementsByTag(Constants.IMG_TAG).attr(Constants.SRC_ATTRIBUTE);​
 </​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()]]; ​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> 
 +ImageRequest cartoonRequest = new ImageRequest( 
 +  cartoonUrl,​ 
 +  new Response.Listener<​Bitmap>​() { 
 +    @Override 
 +    public void onResponse(Bitmap bitmap) { 
 +      xkcdCartoonImageView.setImageBitmap(bitmap);​ 
 +    } 
 +  }, 
 +  0, 
 +  0, 
 +  null, 
 +  Bitmap.Config.RGB_565,​ 
 +  new Response.ErrorListener() { 
 +    public void onErrorResponse(VolleyError volleyError) { 
 +      Log.d(Constants.TAG,​ volleyError.toString());​ 
 +      if (Constants.DEBUG) { 
 +        Toast.makeText(xkcdCartoonTitleTextView.getContext(),​ xkcdCartoonTitleTextView.getResources().getString(R.string.an_error_has_occurred),​ Toast.LENGTH_LONG) 
 +             ​.show();​ 
 +      } 
 +    } 
 +  } 
 +); 
 +VolleyController.getInstance(xkcdCartoonImageView.getContext()).addToRequestQueue(cartoonRequest);​ 
 +</​code>​
   * 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 1038: Line 1062:
  
 <code java> <code java>
-private class XkcdCartoonDisplayerAsyncTask ​extends AsyncTask<​String,​ Void, XkcdCartoonInfo> {+private class XKCDCartoonDisplayerAsyncTask ​extends AsyncTask<​String,​ Void, XKCDCartoonInformation> {
  
   @Override ​   ​   @Override ​   ​
-  protected ​XkcdCartoonInfo ​doInBackground(String... urls) {+  protected ​XKCDCartoonInformation ​doInBackground(String... urls) {
     // get the html document corresponding to the xkcd.com website     // get the html document corresponding to the xkcd.com website
     // parse the document in order to obtain the needed information     // parse the document in order to obtain the needed information
Line 1047: Line 1071:
  
   @Override   @Override
-  protected void onPostExecute(XkcdCartoonInfo xkcdCartoonInfo) {+  protected void onPostExecute(XKCDCartoonInformation xkcdCartoonInformation) {
     // get references to the needed information     // get references to the needed information
     // map the information to the corresponding widget ​     // map the information to the corresponding widget ​
Line 1061: Line 1085:
  
 <code java> <code java>
-new XkcdCartoonDisplayerAsyncTask().execute(Constants.XKCD_INTERNET_ADDRESS);​+new XKCDCartoonDisplayerAsyncTask().execute(Constants.XKCD_INTERNET_ADDRESS);​
 </​code>​ </​code>​
  
Line 1068: Line 1092:
 Se cere să se implementeze o aplicație Android care să realizeze o căutare folosind motorul [[http://​www.google.com|Google]],​ rezultatul fiind expus printr-un control grafic de tip [[http://​developer.android.com/​reference/​android/​webkit/​WebView.html|WebView]]. Se cere să se implementeze o aplicație Android care să realizeze o căutare folosind motorul [[http://​www.google.com|Google]],​ rezultatul fiind expus printr-un control grafic de tip [[http://​developer.android.com/​reference/​android/​webkit/​WebView.html|WebView]].
  
-{{ :​laboratoare:​laborator07:​googlesearcher.png?​nolink&​400 }}+{{ :​laboratoare:​laborator07:​07googlesearcher.png?​nolink&​400 }}
  
 În situația în care șirul de caractere după care se realizează căutarea conține mai multe cuvinte (având drept delimitator caracterul spațiu), acestea vor fi legate prin intermediul caracterului ''​+''​. În situația în care șirul de caractere după care se realizează căutarea conține mai multe cuvinte (având drept delimitator caracterul spațiu), acestea vor fi legate prin intermediul caracterului ''​+''​.
Line 1104: Line 1128:
   * codul de țară.   * codul de țară.
  
-{{ :​laboratoare:​laborator07:​landmarklister.png?​nolink&​400 }}+{{ :​laboratoare:​laborator07:​08landmarklister.png?​nolink&​400 }}
  
 Adresa Internet la care este disponibil rezultatul în format JSON conține informații cu privire la coordonatele punctelor cardinale, precum și cu privire la numele de utilizator: Adresa Internet la care este disponibil rezultatul în format JSON conține informații cu privire la coordonatele punctelor cardinale, precum și cu privire la numele de utilizator:
laboratoare/laborator07.1460679785.txt.gz · Last modified: 2017/02/20 20:44 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0