En esta serie de "Crossfit Chess 1.0: Zero to App Android" estamos haciendo una App Sencilla en Android que pretende ser un entrenador de ajedrez.
Para esto, tomará problemas desde un servidor, publicados con JSON.
En el post anterior vimos precisamente como consumimos un servicio Json con Gson, hoy seguiremos con la misma linea, pero invocando a mas servicios de la API, y finalmente mostrando en pantallas las imágenes recuperadas desde el servidor.
La cual se como:
O sea, asi está ok
Entonces la clase Callback es:
Nuevamente, la prueba de Junit, aunque estuvo cerca de funcionar.... no funcionó...
En la ejecución, observemos que muestra un Toast que dice que recuperó 6 productos desde el backend:
Para esto, tomará problemas desde un servidor, publicados con JSON.
En el post anterior vimos precisamente como consumimos un servicio Json con Gson, hoy seguiremos con la misma linea, pero invocando a mas servicios de la API, y finalmente mostrando en pantallas las imágenes recuperadas desde el servidor.
Comencemos
Paso 05 - Invocamos una API REST
La API rest la habíamos construido con Node.js y Heroku y la habíamos publicado en:
La cual se como:
Tenemos que darle el permiso a Internet en el AdnroidManifest:
<uses-permission android:name="android.permission.INTERNET"/>
Debemos agregar
compile 'com.mcxiaoke.volley:library:1.0.18'
Implementamos el GsonRequest, esta es una clase genérica, que puede ser siempre igual
O sea, asi está ok
public class GsonRequestAgregamos el código de invocación, es importante agregar también el "callback", o sea, la clase que manipulará las respuestas:extends Request { private final Gson gson = new Gson(); private final Class clazz; private final Map headers; private final Response.Listener listener; /** * Make a GET request and return a parsed object from JSON. * * @param url URL of the request to make * @param clazz Relevant class object, for Gson's reflection * @param headers Map of request headers */ public GsonRequest(String url, Class clazz, Map headers, Response.Listener listener, Response.ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; } @Override public Map getHeaders() throws AuthFailureError { return headers != null ? headers : super.getHeaders(); } @Override protected void deliverResponse(T response) { listener.onResponse(response); } @Override protected Response parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success( gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } }
GsonRequestCallback gsonRequestCallback = new GsonRequestCallback(); GsonRequest gsonRequest = new GsonRequest<>(URL, Producto[].class, null, gsonRequestCallback, gsonRequestCallback); Volley.newRequestQueue(this).add(gsonRequest);
Entonces la clase Callback es:
private class GsonRequestCallback implements Response.Listener, Response.ErrorListener { private String TAG_GSON = "GSON CallBack::" + GsonRequestCallback.class.getName(); /** * Called when a response is received. * * @param response */ @Override public void onResponse(Producto[] response) { Log.d(TAG_GSON, "onResponse()" + response) ; Toast.makeText(CrossfitChessActivity.this, "Productos: " + response.length, Toast.LENGTH_SHORT).show(); productos = Arrays.asList(response); Log.d(TAG_GSON, "productos: " + productos); } /** * Callback method that an error has been occurred with the * provided error code and optional user-readable message. * * @param error */ @Override public void onErrorResponse(VolleyError error) { Log.d(TAG_GSON, "onErrorResponse()" + error); Toast.makeText(CrossfitChessActivity.this, "ERROR", Toast.LENGTH_SHORT).show(); } }
Nuevamente, la prueba de Junit, aunque estuvo cerca de funcionar.... no funcionó...
En la ejecución, observemos que muestra un Toast que dice que recuperó 6 productos desde el backend:
En el próximo post, veremos como esos 6 productos se muestran en la activity
0 comentarios:
Publicar un comentario