Estoy tratando de conseguir la exacta JSON que está siendo enviado en la petición. Aquí está mi código:
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor(){
@Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Log.e(String.format("\nrequest:\n%s\nheaders:\n%s",
request.body().toString(), request.headers()));
com.squareup.okhttp.Response response = chain.proceed(request);
return response;
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client).build();
Pero solo puedo ver esto en los logs:
request:
com.squareup.okhttp.[email protected]
headers:
Content-Type: application/vnd.ll.event.list+json
Cómo se supone que voy a hacer buen registro, dada la eliminación de setLog()
y setLogLevel()
que se usa con la modernización de 1?
En Retrofit 2 debe utilizar HttpLoggingInterceptor.
Añadir dependencia a
build.gradle
. La última versión de octubre de 2019 es:Crear un
Retrofit
objeto, como las siguientes:En caso de ser desaprobado advertencias, simplemente cambiar
setLevel
a:La solución anterior le da logcat mensajes muy similares a los antiguos establecidos por
En caso de
java.lang.ClassNotFoundException
:Mayores de Reconversión de la versión puede requerir una mayor
logging-interceptor
versión. Echa un vistazo a las secciones de comentarios para obtener más detalles.Failed to resolve: om.squareup.okhttp:logging-interceptor:2.6.0-SNAPSHOT
Lo que está mal?maven { url 'http://oss.sonatype.org/content/repositories/snapshots' }
ApiClient
con DI patrón. Bo honesto, es copiar-pegar de la Daga proveedor método 🙂compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
2.2.0
, usocom.squareup.okhttp3:logging-interceptor:3.6.0
Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.internal.Platform" on path
HttpLoggingInterceptor.Logger
interfaz para la entrega a mi logback logger para el trabajo real.NoClassDefFoundError
de error cuando se ejecuta elcom.squareup.okhttp3:logging-interceptor:3.12.0
biblioteca en mi Tarro. Funciona bien cuando se ejecuta a través de la IDE. He creado este StackOverflow post.setLevel is deprecated
tiene que cambiar desetLevel
alevel
para solucionar el problema!Conocí a la cosa, como usted y yo traté de preguntar al autor del libro Retrofit: me Encanta trabajar con las Api de Android (aquí está el enlace)
(nope! No estoy haciendo algunos anuncios para ellos….pero son muy buenas personas 🙂
Y el autor me respondió muy pronto, tanto con el método de Registro en Retrofit 1.9 o 2.0-beta.
Y aquí está el código de Reconversión de 2.0 beta:
Esta es la forma en agregar método de registro con la ayuda de HttpLoggingInterceptor. También si usted es el lector de ese libro que he mencionado anteriormente, usted puede encontrar que se dice que no hay método de registro con la modernización de 2.0 ya que, que me había pedido el autor, no es correcta y se actualizará el libro el próximo año hablando.
//En caso de que usted no está familiarizado con el método de Registro en Reconversión, me gustaría compartir algo más.
También debe ser notado que hay algunos Niveles de Registro usted podría escoger. Yo uso el Nivel.CUERPO la mayoría de las veces, lo que le da algo como esto:
Usted puede encontrar casi todos los http personal dentro de la imagen: la cabecera, el contenido y la respuesta, etc.
Y, a veces, usted realmente no necesita que todos los invitados a asistir a su fiesta: sólo quiero saber si está conectado correctamente, que la llamada de internet es realizado con éxito dentro de mi Activiy & Fragmetn. Entonces usted es libre de utilizar Nivel.BÁSICA, que devolverá algo como esto:
Se puede encontrar el código de estado 200 OK dentro? Eso es todo 🙂
También hay otro, Nivel.ENCABEZADOS, que sólo devolverá el encabezado de la red. Ya, por supuesto, otra imagen aquí:
Que todo el Registro de truco 😉
Y me gustaría compartir con usted el tutorial he aprendido mucho allí. Tienen un montón de gran post hablando de casi todo lo relacionado con la Instalación, y se siguen actualizando el post, al mismo tiempo Retrofit 2.0 está por venir. Por favor, echa un vistazo a los trabajos, que creo que le va a ahorrar mucho tiempo.
Aquí es un
Interceptor
que registra tanto la solicitud y la respuesta de los cuerpos (el uso de la Madera, basado en un ejemplo de la OkHttp docs y algunos otros de MODO que las respuestas):Intente esto:
Después de esto, en el
body
no es el JSON que usted está interesado en.String bodyString = response.body().string(); log(bodyString); response = response.newBuilder().body(ResponseBody.create(response.body().contentType(), bodyString)).build();
(Usted no puede leer la respuesta del cuerpo más de una vez, así que tendrás que crear nueva respuesta con el constructor)El principal problema al que me enfrenté fue dinámico agregar encabezados y registro de ellos en debug logcat. He intentado añadir dos interceptores. Uno para el registro y uno para agregar encabezados on-the-go (token de autorización). El problema fue que nos puede .addInterceptor o .addNetworkInterceptor. Como Jake Wharton me dijo: «Red de interceptores siempre vienen después de la aplicación de los interceptores. Ver https://github.com/square/okhttp/wiki/Interceptors«. Así que aquí es ejemplo de trabajo con los jefes y los registros:
No sé si setLogLevel() devolverá en la final de la versión 2.0 de Retrofit, pero por ahora se puede utilizar un interceptor para el registro.
Un buen ejemplo se puede encontrar en OkHttp wiki: https://github.com/square/okhttp/wiki/Interceptors
Para aquellos que necesitan alto nivel de registro en la Instalación, utilice el interceptor como este
Cortesía: https://github.com/square/retrofit/issues/1072#
Si usted está usando Retrofit2 y okhttp3 entonces usted necesita saber que el Interceptor de obras de cola. Para agregar loggingInterceptor al final, después de sus otras Interceptores:
También puede agregar Facebook del Stetho y mirar las trazas de red en Chrome:
http://facebook.github.io/stetho/
A continuación, abra «chrome://inspeccionar» en Chrome…
Kotlin Código
esto creará una actualización de objeto con el Registro. sin la creación de objetos separados.
Una mejor manera de hacer esto bien en Retrofit 2 es agregar el registrador de interceptor como un networkInterceptor esto va a imprimir los encabezados de red y su encabezados personalizados también. Lo importante es recordar que el interceptor de trabajo como una pila y asegúrese de u agregar el registrador, al final de todo.
La mayoría de la respuesta aquí cubre casi todo excepto a esta herramienta, una de las mejores maneras para ver el registro.
Es Facebook del Stetho. Este es el excelente herramienta para monitorear/registro de su aplicación en el tráfico de la red en google chrome. Usted también puede encontrar aquí en Github.
para la modificación 2.0.2 el código es como
Primer Añadir dependencia a construir.gradle:
aplicación ‘com.squareup.okhttp3:registro-interceptor:3.12.1’
Mientras que el uso de Kotlin puede añadir el Registro de Interceptor como este :
Aquí es una forma sencilla de filtrar cualquier petición/respuesta de parámetros a partir de los registros de uso de
HttpLoggingInterceptor
:Aquí está la información completa de:
https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168
He encontrado forma de Registro de Impresión en Retrofit
Funciona para mí.
hola chicos,yo ya encontró la solución: