domingo, 4 de octubre de 2015

CONSUMO SERVICIOS REST DESDE ANDROID

Paso a Paso consumo de servicios Rest
Cuando se intentar consumir servicios SOAP desde Android, es necesario el uso de una librería especifica para realizar cualquier acción sobre este tipo de servicios. En esta ocasión que los servicios a utilizar son REST, no se utiliza ninguna librería externa para acceder al servicio web, ya que Android incluye todo lo necesario para realizar la conexión y llamada a los métodos del servicio, y tratamiento de resultados en formato JSON.
Al trabajar con servicios web de tipo REST, las llamadas al servicio no se harán a través de una única URL, sino que se determinará la acción a realizar según la URL accedida y la acción HTTP utilizada para realizar la petición (GETPOSTPUT o DELETE). A continuación veremos las acciones que hemos implementado para el control del Reactor.
GET
La obtención de datos del reactor se realiza a través de la siguiente URL:
http://info1rs.azurewebsites.net/api/modelstates/1
Desde la cual obtendremos el siguiente JSON.
{Bar1:1, DynamicTemp:falseId:1, PumpingSystem:1, Temperature:52, Valve1:1, Valve2:0, Valve3:0}
y el cual se recibe de la siguiente manera en android:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

private static Datos datos; private static String service = "http://info1rs.azurewebsites.net/api/modelstates/1"; private static HttpClient httpClientGet; private static HttpClient httpClientPut; private static HttpGet httpGet; private static HttpPut httpPut;

public static Datos ObtenerDatos(){ if (datos == null){ datos = new Datos(); } if (httpClientGet == null){ httpClientGet = new DefaultHttpClient(); } if (httpGet == null){ httpGet = new HttpGet(service); httpGet.setHeader("content-type", "application/json"); } try { HttpResponse response = httpClientGet.execute(httpGet); String respStr = EntityUtils.toString(response.getEntity()); JSONObject responseJSON = new JSONObject(respStr); int temperatura = responseJSON.getInt("Temperature"); int valvula1 = responseJSON.getInt("Valve1"); int valvula2 = responseJSON.getInt("Valve2"); int valvula3 = responseJSON.getInt("Valve3"); int barras = responseJSON.getInt("Bar1"); int bombeo = responseJSON.getInt("PumpingSystem"); datos.setTemperatura(temperatura); datos.setValvula1(valvula1); datos.setValvula2(valvula2); datos.setValvula3(valvula3); datos.setBarras(barras); datos.setBombeo(bombeo); } catch(Exception ex) { datos.setError(ex.toString()); } return datos; }

PUT

Para actualizar los datos del reactor, realizaremos la ejecución de la acción PUT,  de igual forma mediante la URL:

http://info1rs.azurewebsites.net/api/modelstates/1

Enviaremos un objeto JSON con la misma estructura de lo obtenido en la lectura de datos, de la siguiente manera.

{Bar1:0, DynamicTemp:falseId:1PumpingSystem:0Temperature:52Valve1:0Valve2:0Valve3:0}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

public static boolean ActualizarDatos(Datos datosUpdate){ if (httpClientPut == null){ httpClientPut = new DefaultHttpClient(); } if (httpPut == null){ httpPut = new HttpPut(service); httpPut.setHeader("content-type", "application/json"); } try { //Construimos el objeto cliente en formato JSON JSONObject dato = new JSONObject(); dato.put("Id", 1); dato.put("Temperature", datosUpdate.getTemperatura()); dato.put("Valve1", datosUpdate.getValvula1()); dato.put("Valve2",datosUpdate.getValvula2()); dato.put("Valve3",datosUpdate.getValvula3()); dato.put("Bar1",datosUpdate.getBarras()); dato.put("PumpingSystem",datosUpdate.getBombeo()); dato.put("DynamicTemp",false); StringEntity entity = new StringEntity(dato.toString()); httpPut.setEntity(entity); HttpResponse resp = httpClientPut.execute(httpPut); if(resp != null) return true; else return false; } catch(Exception ex) { return false; } }
Para obtener mayor información sobre como consumir las demás acciones, por favor visitar http://www.sgoliver.net/blog/acceso-a-servicios-web-rest-en-android-22/

No hay comentarios:

Publicar un comentario