TIP: Agregar loggin interceptor a Retrofit 2

* Nota: Si quieres saber como implementar Retrofit 2 puedes consultar el siguiente link Uso de Retrofit 2 en Android

Siempre es agradable poder saber que está sucediendo con nuestras peticiones http, y lamentablemente, retrofit (2) no loggea automáticamente las peticiones. Pero existe una forma de poder conseguirlo de forma sencilla.

Para ello, debemos agregar las siguientes librerías a nuestro Gradle.

compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhhtp3:loggin-interceptor:2.6.0'

Luego de sincronizar nuestro proyecto, creamos una clase RestClient donde seteamos un par de configuraciones y nuestro loggin-interceptor, el que se encargará de loggear por nosotros lo que sucede con nuestras peticiones.

public class RestClient {

  private static ApiInterface ApiInterface ;
  private static String baseUrl = "http://url.base.com/";

  public static ApiInterface getClient() {

    if (ApiInterface == null) {
      // Creamos nuestro interceptor
      HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            
      // Seteamos el nivel de log deseado, aquí pueden elegir las distintas opciones que entrega
      loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            
      // Yo acostumbro a agregar los header en el client OkHtpp para no tener que escribirlos en los métodos
      OkHttpClient okClient = new OkHttpClient();
      okClient.interceptors().add(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
          Request.Builder requestBuilder = chain.request().newBuilder();
          requestBuilder.header("Content-Type", "application/json");
          return chain.proceed(requestBuilder.build());
        }
      });
      // Agregamos nuestro loggin interceptor al cliente OkHtpp
      okClient.interceptors().add(loggingInterceptor);

      Retrofit client = new Retrofit.Builder()
        .baseUrl(baseUrl)
        .addConverterFactory(GsonConverterFactory.create())
        // Agregamos nuestro cliente OkHttp a nuestro cliente Retrofit
        .client(okClient)
        .build();
      ApiInterface = client.create(ApiInterface.class);
    }

    return ApiInterface;
  }

  public interface ApiInterface {
    @POST("path/to")
    Call<Model> methodName(@Body Object object);
  }
}

Luego, en donde sea que necesitemos realizar una petición, sólo debemos instanciar nuestro RestClient y hacer el llamado.

RestClient.ApiInterface service;

service = RestClient.getClient();

Call<Model> callName = service.methodName(Params params);
callName.enqueue(new Callback<Model>(){
    .....
});

Y voila!… con esto ya tienen logs de sus peticiones http.
Saludos, y cualquier corrección que haya que realizar me avisan!
PD: mi twitter es @droblesv, síganme!

Comenta este post