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 [2015/04/20 13:49]
Andrei Roșu-Cojocaru
laboratoare:laborator07 [2015/04/22 17:34] (current)
Andrei Roșu-Cojocaru
Line 1: Line 1:
-====== Laborator 07. Invocarea de servicii web prin protocolul ​HTTP ======+====== Laborator 07. Invocarea de Servicii Web prin Protocolul ​HTTP ======
  
 De multe ori, funcționalitatea pe care o pun la dispoziție aplicațiile Android este preluată din alte surse, datorită limitărilor impuse de capacitatea de procesare și memorie disponibilă ale unui dispozitiv mobil. O strategie posibilă în acest sens este utilizarea HTTP, pentru interogarea unor servicii web. De multe ori, funcționalitatea pe care o pun la dispoziție aplicațiile Android este preluată din alte surse, datorită limitărilor impuse de capacitatea de procesare și memorie disponibilă ale unui dispozitiv mobil. O strategie posibilă în acest sens este utilizarea HTTP, pentru interogarea unor servicii web.
Line 521: Line 521:
   },   },
   ...   ...
-    ​{+  ​{
     "​attribute1":​ "​valuem1",​     "​attribute1":​ "​valuem1",​
     "​attribute2":​ "​valuem2",​     "​attribute2":​ "​valuem2",​
Line 565: Line 565:
  
 Reprezentarea unui obiect JSON sub forma unui șir de caractere poate fi obținută prin intermediul metodelor: Reprezentarea unui obiect JSON sub forma unui șir de caractere poate fi obținută prin intermediul metodelor:
-  * [[http://​developer.android.com/​reference/​org/​json/​JSONObject.html#​toString%28%29|toString()]] +  * [[http://​developer.android.com/​reference/​org/​json/​JSONObject.html#​toString%28%29|toString()]] ​- formă compactă; 
-  * [[http://​developer.android.com/​reference/​org/​json/​JSONObject.html#​toString%28%29|toString(int indentSpaces)]]+  * [[http://​developer.android.com/​reference/​org/​json/​JSONObject.html#​toString%28%29|toString(int indentSpaces)]] ​- formă utilizată în scop de depanare. 
 + 
 +Unele metode furnizează vectori de obiecte JSON, reprezentate de clasa [[http://​developer.android.com/​reference/​org/​json/​JSONArray.html|JSONArray]],​ în care accesul la obiecte se face indexat, începând cu 0: 
 +  * [[http://​developer.android.com/​reference/​org/​json/​JSONObject.html#​names%28%29|names()]] - lista numelor dintr-un obiect JSON; 
 +  * [[http://​developer.android.com/​reference/​org/​json/​JSONObject.html#​toJSONArray%28org.json.JSONArray%29|toJSONArray(JSONArray names)]] - lista valorilor asociate unor atribute dintr-un vector de obiecte JSON.
  
 ==== Exemplu ==== ==== Exemplu ====
 +
 +Se dorește să se implementeze o aplicație Android care să afișeze informații cu privire la cutremurele care s-au produs într-un anumit areal geografic (desemnat prin coordonatele nord, sud, est, vest) pe baza rezultatelor furnizate de serviciul web [[http://​api.geonames.org/​earthquakesJSON|Geonames Earthquakes]].
 +
 +Detaliile care se doresc a fi vizualizate pentru fiecare cutremur în parte sunt:
 +  * așezarea geografică (latitudinea și longitudinea);​
 +  * magnitudinea;​
 +  * adâncimea la care a avut loc;
 +  * sursa informației;​
 +  * data și ora la care s-a înregistrat.
  
 {{ :​laboratoare:​laborator07:​earthquakelister.png?​nolink&​400 }} {{ :​laboratoare:​laborator07:​earthquakelister.png?​nolink&​400 }}
 +
 +Adresa Internet la care este disponibil rezultatul în format JSON trebuie să specifice în mod necesar informațiile cu privire la coordonatele punctelor cardinale, precum și cu privire la numele de utilizator:
 +  * ''​north'',​ ''​south'',​ ''​east'',​ ''​west''​ - valoarea coordonatelor corespunzătoare punctelor cardinale, exprimate ca numere reale, cu semn;
 +  * ''​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=pdsd|]].
 +
 +Rezultatele sunt furnizate în următorul format:
 +
 +<code json>
 +{
 +  "​earthquakes":​[
 +                  {
 +                    "​eqid":"​c0001xgp",​
 +                    "​magnitude":​8.8,​
 +                    "​lng":​142.369,​
 +                    "​src":"​us",​
 +                    "​datetime":"​2011-03-11 04:​46:​23",​
 +                    "​depth":​24.4,​
 +                    "​lat":​38.322
 +                  },
 +                  {
 +                    "​eqid":"​c000905e",​
 +                    "​magnitude":​8.6,​
 +                    "​lng":​93.0632,​
 +                    "​src":"​us",​
 +                    "​datetime":"​2012-04-11 06:​38:​37",​
 +                    "​depth":​22.9,​
 +                    "​lat":​2.311
 +                  },
 +                  ...
 +                ]
 +}
 +</​code>​
 +
 +Astfel, informațiile care trebuie preluate din rezultat sunt:
 +^  atribut JSON  ^  tip de date  ^  detaliu ​ ^
 +| ''​lat''​ | ''​double''​ | latitudine |
 +| ''​lng''​ | ''​double''​ | longitudine |
 +| ''​magnitude''​ | ''​double''​ | magnitudinea |
 +| ''​depth''​ | ''​double''​ | adâncimea |
 +| ''​src''​ | ''​String''​ | sursa informației |
 +| ''​datetime''​ | ''​String''​ | data și ora la care s-au înregistrat datele |
 +
 +Prin urmare, pașii care trebuie urmați pentru implementarea funcționalității sunt:
 +  - construirea URL-ului, prin atașarea informațiilor preluate de la utilizator (coordonatele punctelor cardinale);
 +  - execuția unei cereri HTTP;
 +  - parsarea documentului JSON corespunzător răspunsului HTTP; <code java>
 +final ArrayList<​EarthquakeInformation>​ earthquakeInformationList = new ArrayList<​EarthquakeInformation>​();​
 +JSONObject result = new JSONObject(content);​
 +JSONArray jsonArray = result.getJSONArray(Constants.EARTHQUAKES);​
 +for (int k = 0; k < jsonArray.length();​ k++) {
 +  JSONObject jsonObject = jsonArray.getJSONObject(k);​
 +  earthquakeInformationList.add(new EarthquakeInformation(
 +    jsonObject.getDouble(Constants.LATITUDE),​
 +    jsonObject.getDouble(Constants.LONGITUDE),​
 +    jsonObject.getDouble(Constants.MAGNITUDE),​
 +    jsonObject.getDouble(Constants.DEPTH),​
 +    jsonObject.getString(Constants.SOURCE),​
 +    jsonObject.getString(Constants.DATETIME)
 +  ));
 +}
 +</​code>​
 +  - atașarea informațiilor obținute în cadrul unui control grafic de tip listă.
  
 ===== Activitate de Laborator ===== ===== Activitate de Laborator =====
Line 606: Line 683:
 <​code>​ <​code>​
 operation = addition|substraction|multiplication|division operation = addition|substraction|multiplication|division
-operation1 ​= număr real +operator1 ​= număr real 
-operation2 ​= număr real+operator2 ​= număr real
 </​code>​ </​code>​
  
Line 638: Line 715:
 **5.** ​ Să se importe în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) proiectul ''​02-XkcdCartoonDisplayer''​ din directorul ''​labtasks''​. **5.** ​ Să se importe în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) proiectul ''​02-XkcdCartoonDisplayer''​ din directorul ''​labtasks''​.
  
-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 ​carticaturi, 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:​xkcdcartoondisplayer.png?​nolink&​400 }}
Line 801: Line 878:
 | ''​lat''​ | ''​double''​ | latitudine | | ''​lat''​ | ''​double''​ | latitudine |
 | ''​lng''​ | ''​double''​ | longitudine | | ''​lng''​ | ''​double''​ | longitudine |
-| ''​toponymName''​ | ''​String''​ | denumirea toponimului|+| ''​toponymName''​ | ''​String''​ | denumirea toponimului |
 | ''​population''​ | ''​long''​ | populație | | ''​population''​ | ''​long''​ | populație |
 | ''​fcodeName''​ | ''​String''​ | descriere localitate | | ''​fcodeName''​ | ''​String''​ | descriere localitate |
Line 808: Line 885:
 | ''​countrycode''​ | ''​String''​ | codul de țară | | ''​countrycode''​ | ''​String''​ | codul de țară |
  
-Astfel, pașii care trebuie urmați pentru implementarea funcționalității sunt:+Prin urmare, pașii care trebuie urmați pentru implementarea funcționalității sunt:
   - construirea URL-ului, prin atașarea informațiilor preluate de la utilizator (coordonatele punctelor cardinale);   - construirea URL-ului, prin atașarea informațiilor preluate de la utilizator (coordonatele punctelor cardinale);
   - execuția unei cereri HTTP;   - execuția unei cereri HTTP;
Line 848: Line 925:
 [[http://​developer.android.com/​reference/​java/​net/​HttpURLConnection.html|HttpURLConnection]]\\ ​ [[http://​developer.android.com/​reference/​java/​net/​HttpURLConnection.html|HttpURLConnection]]\\ ​
 [[http://​hc.apache.org/​httpcomponents-client-4.4.x/​index.html|Apache Http Components]]\\ ​ [[http://​hc.apache.org/​httpcomponents-client-4.4.x/​index.html|Apache Http Components]]\\ ​
 +[[http://​developer.android.com/​reference/​org/​apache/​http/​client/​HttpClient.html|HttpClient]],​ [[http://​developer.android.com/​reference/​org/​apache/​http/​client/​methods/​HttpGet.html|HttpGet]],​ [[http://​developer.android.com/​reference/​org/​apache/​http/​client/​methods/​HttpPost.html|HttpPost]]\\ ​
 [[http://​jsoup.org/​|Jsoup]]\\ ​ [[http://​jsoup.org/​|Jsoup]]\\ ​
 [[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]]
laboratoare/laborator07.1429526948.txt.gz · Last modified: 2015/04/20 13:49 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0