+ Connettersi al web Nicolò Sordoni
+ Verificare se lo smartphone è connesso Per poter accedere alla rete, è consigliato innanzitutto verificare se il device sia in grado di connettersi, quindi è necessario verificare se esiste una connessione e se questa consente accesso al web (è possibile che esista una connessione, ma che sia limitata). Per farlo è necessario ottenere un cosiddetto profilo di connessione, cioè l’insieme di informazioni associati a quello specifico collegamento (Tipo e livello della connessione, eventuale costo, ecc.) L’esempio seguente mostra come sia possibile ottenere il riferimento al profilo di connessione corrente. Una volta verificato che non sia nullo (altrimenti non si avrebbe connessione, è necessario controllare il livello di connettività, accedendo ad un apposita proprietà (di tipo enum).
+ Verificare se lo smartphone è connesso
+ Effettuare una richiesta Dopo essersi accertati che la connessione sia disponibile, è possibile accedere alla rete per effettuare una richiesta, per scaricare il contenuto di una determinata pagina (eventualmente passando dei parametri) oppure un file. Per farlo è necessario utilizzare la classe HttpClient, definita nel namespace Windows.Web.Http. Tale classe offre una serie di metodi che ci consentono di effettuare le più comuni operazioni HTTP (POST, GET, PUT,...).
+ GET Per effettuare una richiesta in GET, è sufficiente utilizzare il metodo GetAsync, passando in input un oggetto di tipo Uri, che dovrà indicare l’URL della pagina desiderata. Dato che le operazioni di rete sono gestite in maniera asincrona, è necessario utilizzare le classiche keyword async e await. E’ inoltre consigliato inserire tutto il blocco in un try-catch, dato che potrebbero verificarsi eccezioni che andranno opportunamente gestite. Tale metodo restituisce un oggetto di tipo HttpResponseMessage, che ci permette di accedere alle principali informazioni del messaggio di risposta.
+ HttpResponseMessage La classe HttpResponseMessage fornisce informazioni riguardo il messaggio di risposta ottenuto dal server: StatusCode: il codice di stato della risposta (Es: 200 = OK ) IsSuccessStat usCode: property booleana usata per verificare che lo StatusCode indichi risposta positiva (quindi richiesta andata a buon fine) Headers: consente l’accesso agli header HTTP della risposta. Content: Il contenuto vero e proprio della risposta che è stata restituita.
+ HttpResponseMessage Per leggere il testo vero e proprio della risposta, è necessario invocare un ulteriore metodo asincrono, in questo caso appartenente all’oggetto HttpResponseMessage, che restituisce la stringa desiderata. Tale metodo è ReadAsStringAsync, che non accetta alcun parametro in ingresso. Il seguente frammento di codice mostra come ottenere il contenuto di una pagina (isConnectionAvailable() è un metodo creato che abbiamo creato appositamente per verificare lo stato della connessione).
+ Passare parametri alla pagina Oltre ad ottenere il contenuto di una pagina web, capita molto frequentemente che un’applicazione abbia bisogno di passare delle informazioni. Ad esempio, nel caso in cui l’utente effettui il login tramite app, è necessario che tali parametri vengano passati ad un server che ne verifichi la correttezza. Per farlo, le soluzioni più frequenti sono GET e POST. GET: I parametri vengono accodati all’url della pagina. Ad esempio: POST: Le informazioni vengono inserite all’interno del Body della richiesta effettuata.
+ POST Per poter effettuare un post, il metodo da utilizzare è PostAsync, che restituisce un oggetto di tipo HttpResponseMessage, ma, a differenza del get, accetta due parametri in input. Il primo è il classico Uri della pagina da invocare. Il secondo parametro, invece è di tipo IHttpContent, ed è il contenuto della richiesta che sarà effettuata. Esistono vari tipi di content, a seconda di ciò che vogliamo passare alla pagina: HttpFormUrlEncodedContent : Il tipo più utilizzato, permette di definire un insieme di coppie chiave/valore da passare alla pagine. HttpMultipartFormDataContent : Permette di inviare, oltre a testo e coppie chiave/valore, anche files e immagini.
+ POST HttpStringContent: Il tipo più semplice; permette di inviare una stringa. Per utilizzare un HttpFormUrlEncodedContent è sufficiente definire un Dictionary, cioè sostanzialmente una hash map che utilizza delle stringhe sia come chiave che come valore, che conterrà quindi i vari parametri.
+ Leggere un JSON Uno dei formati più utilizzati per lo scambio di dati con il server è sicuramente il JSON. Tale formato offre una sintassi molto snella e veloce in fase di parsing ed è per questo motivo che in molti casi viene preferito all’XML. Windows Phone mette a disposizione alcune classi che ci agevolano nell’utilizzo di tale formato, definite nel namespace Windows.Data.Json. Ad esempio, supponendo di ottenere un oggetto JSON dal nostro server, e di doverlo convertire in un oggetto in memoria, è sufficiente fare affidamento alla classe JsonObject. Tale classe mette a disposizione il metodo statico Parse che, presa in input una stringa, se formattata correttamente, restituisce una propria istanza. Utilizzando questa istanza potremo accedere agevolmente alle proprietà di cui abbiamo bisogno.
+ Leggere un JSON Supponiamo ad esempio di voler leggere il seguente oggetto Json: {"nome":"Mario","cognome":"Rossi”}. Per leggerlo ed accedere alle sue proprietà, il codice da utilizzare è il seguente. La classe JsonObject offre vari metodi per accedere ai differenti tipi di valori, definendo eventualmente un valore di default che sarà restituito nel caso non sia presente l’attributo desiderato. Ovviamente è necessario conoscere a priori il tipo di dato e la chiave.