Crossfit Chess 1.0: Zero to App Android (Parte III)
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
Agregamos el código de invocación, es importante agregar también el "callback", o sea, la clase que manipulará las respuestas:
public class GsonRequestextends Request {
private final Gson gson = new Gson();
private final Classclazz;
private final Mapheaders;
private final Response.Listenerlistener;
/**
* 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, Classclazz, Map headers,
Response.Listenerlistener, Response.ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}
@Override
public MapgetHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected ResponseparseNetworkResponse(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 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home