Xamarin Forms & PCL HttpClient

Esta estrada viene por la consulta realizada por @barbpabl sobre como utilizar httpClient desde una librería PCL. Porque tenia problemas al ejecutar desde Android.

Antes de empezar solo recordar que una librería PCL es aquella que al compilar es compatible con diferentes plataformas y nos ayuda a generar librerías multi-plataforma.

Por ejemplo con la librería PCL generada con un proyecto Xamarin.Forms v.1.0.6186 la librería es compatible con:

PCL

A partir de aquí como reutilizar mis llamadas Http en una sola librería para poder compartir el código en todas las plataformas compatibles con esta librería.

1. Crear el proyecto Xamarin Forms

Lo primero de todo es crear el proyecto móvil con Xamarin Forms,

proyect

 

2. Añadir las librerías necesarias con Nuget

2.1  Añadir Microsoft Http Client Libraries

Con esta librería tendremos disponible la versión PCL de la librería .NET de HTTPClient. Es importante que se instale desde la solución a todas las plataformas, porque cada una tiene unas dependencias que hay que tener instaladas.

Microsoft Http Client Libraries  –>

PM> Install-Package Microsoft.Net.Http

HttpClient2

2.2 Añadir la librería para trabajar con Json al proyecto PCL

NewtonSoft  –> PM> Install-Package Newtonsoft.Json

3. Crear un Servicio para las llamadas Http

Creamos una clase service para utilizar desde nuestra pcl y que este disponible para compartir en todas las plataformas.

public async Task<Weather> GetAsync(string url)
        {
            var data = "";
            using (var client = new System.Net.Http.HttpClient())
            {
                var response = await client.GetAsync(url);
                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    data = await response.Content.ReadAsStringAsync();
                }
            }
            return JsonConvert.DeserializeObject<Weather>(data);
        }

Este servicio recupera el resultado de una llamada http asíncrona y serializa el resultado en un objeto Weather de nuestro modelo. A esta función se le pasa la url a consultar como  parámetro.

4. Utilizamos el servicio desde la App PCL

Ahora solo tenemos que utilizar este servicio desde nuestro viewModel para recuperar el tiempo que hace en Barcelona.

public async void LoadHttpTemp()
     {
         var serviceHttp = new Services.HttpService();
         var data = await serviceHttp.GetAsync("http://api.openweathermap.org/data/2.5/weather?q=BArcelona&units=metric");
         if (data != null) Temp = data.Main.Temp.ToString("00.##°C");
     }

Gracias a que la propiedad Temp está bindeada con la interfaz, automáticamente se mostrará el resultado en el formulario una vez recibida la información.

Aplicación de ejemplo

Este es el resultado de la App “Android & Windows Phone” utilizando el servicio.

Android WP

Podéis descargar la App de ejemplo desde GitHub…

Cross-posting: http://mrubino.net 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *