Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Volley

 Volley

Apresentação sobre o framework Volley, do Google, realizada no sexto encontro do GDG-SP Android Meetup

Ubiratan Soares

August 06, 2013
Tweet

More Decks by Ubiratan Soares

Other Decks in Programming

Transcript

  1. CONTEXTO API de alto nível para operações de comunicação sobre

    HTTP Desenvolvida pelo time do Google Play Dispobilizada como código aberto e comentada em sessão do último IO
  2. CONTEXTO Mecanismos facilitadores para o básico do dia-a-dia Promete desempenho

    superior a TODAS as soluções abertas disponíveis Soluções para velhos e novos problemas
  3. OBTENDO ! Linkar project library Compilar um .jar > cd

    volley > android update project -p . > ant jar
  4. ! public void performRequest(String requestURL) { final JsonObjectRequest request =

    new JsonObjectRequest(Method.GET, requestURL, null, new Response.Listener<JSONObject>() { ! @Override public void onResponse(JSONObject response) { // TODO pegue sua resposta } ! }, new Response.ErrorListener() { ! @Override public void onErrorResponse(VolleyError error) { // TODO Deu pau... } }); mRequestQueue.add(request); } !
  5. ! public class GsonRequest<T> extends Request<T> { ! private final

    Gson mGson; private final Class<T> mClass; private final Listener<T> mListener; ! public GsonRequest(int method, String url, Class<T> objectClass, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); this.mClass = objectClass; this.mListener = listener; mGson = new Gson(); } ! @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(mGson.fromJson(json, mClass), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } ! @Override protected void deliverResponse(T response) { mListener.onResponse(response); } } GsonRequest.java
  6. ! public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {

    ! public static int getDefaultLruCacheSize() { final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int cacheSize = maxMemory / 8; return cacheSize; } ! public BitmapLruCache() { this(getDefaultLruCacheSize()); } ! public BitmapLruCache(int sizeInKiloBytes) { super(sizeInKiloBytes); } ! @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } ! @Override public Bitmap getBitmap(String url) { return get(url); } ! @Override public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); } } BitmapLRUCache.java
  7. MUITO MAIS !!! Retry customizável para cada requisição Requisições facilmente

    canceláveis Suporte decente à semântica HTTP (GET, POST, PUT, DELETE) Camada HTTP transparente para o resto da API
  8. CONCLUSÕES Biblioteca robusta e madura Facilmente extensível (Gson, Jackson, XML,

    etc) Orientada ao desempenho Mecanismos para debugging e tracing Pilha HTTP plugável
  9. CONCLUSÕES Ainda carece de mais documentação e exemplos... RUIM para

    grandes payloads Pode melhorar em relação à Bitmaps (transformações, API menos burocrática...)