L'enregistrement à l'aide de Rénovation 2
Je vais essayer d'obtenir le exacte JSON qui est envoyé dans la requête. Voici mon code:
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();
Mais je ne vois pas cela dans les journaux:
request:
com.squareup.okhttp.RequestBody$1@3ff4074d
headers:
Content-Type: application/vnd.ll.event.list+json
Comment suis-je censé faire le bon journalisation, compte tenu de la suppression de setLog()
et setLogLevel()
ce qui nous permet de l'utiliser avec de Rénovation 1?
Vous devez vous connecter pour publier un commentaire.
En Rénovation 2, vous devriez utiliser HttpLoggingInterceptor.
Ajouter la dépendance à
build.gradle
:Créer un
Retrofit
objet comme suit:La solution ci-dessus vous donne logcat messages très similaire à l'ancienne celles prévues par
En cas de
java.lang.ClassNotFoundException
:Âgés de Rénovation version peut nécessiter une ancienne
logging-interceptor
version. Regardez les commentaires des sections pour plus de détails.Failed to resolve: om.squareup.okhttp:logging-interceptor:2.6.0-SNAPSHOT
Quel est le problème?maven { url 'http://oss.sonatype.org/content/repositories/snapshots' }
ApiClient
avec DI motif. Au bo honnête, c'est de copier-coller à partir de Poignard par le fournisseur de la méthode 🙂compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
2.2.0
, utilisezcom.squareup.okhttp3:logging-interceptor:3.6.0
Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.internal.Platform" on path
HttpLoggingInterceptor.Logger
interface de transmettre à mon logback de l'enregistreur vers le travail réel.NoClassDefFoundError
d'erreur lors de l'exécution de lacom.squareup.okhttp3:logging-interceptor:3.12.0
bibliothèque dans mon Bocal. Il fonctionne très bien lors de l'exécution via l'IDE. J'ai créé ce StackOverflow post.J'ai rencontré la chose que vous et j'ai essayé de demander à l'auteur du livre Rénovation: Amour, travail avec les Api sur Android (ici, c'est le lien)
(nan! Je ne suis pas de faire quelques annonces, pour eux....mais elles sont vraiment sympa les gars 🙂
Et l'auteur m'a répondu très rapidement, avec à la fois la méthode de journalisation sur la Rénovation de 1,9 et de la Modernisation 2.0 bêta.
Et voici le code de Rénovation 2.0-beta:
C'est comment ajouter de la méthode de journalisation à l'aide de HttpLoggingInterceptor. Aussi, si vous êtes lecteur de ce livre, je l'ai mentionné ci-dessus, vous pouvez trouver qu'il dit là n'est pas la méthode de journalisation avec de Rénovation 2.0 plus -- qui, j'avais demandé à l'auteur, n'est pas correcte et qu'ils vont mettre à jour le livre de l'année prochaine pour en parler.
//Dans le cas où vous n'êtes pas familier avec la méthode Log en Rénovation, je voudrais partager quelque chose de plus.
Doit être aussi remarqué qu'il y a certains Niveaux d'enregistrement vous pouvez choisir. J'utilise le Niveau.CORPS la plupart du temps, ce qui donnera quelque chose comme ceci:
Vous pouvez trouver presque toutes les http personnel à l'intérieur de l'image: l'en-tête, le contenu et la réponse, etc..
Et parfois vous n'avez pas vraiment besoin de tous les invités pour assister à votre fête: je veux juste savoir si il est connecté avec succès, que sur internet, l'appel est réussi, au sein de mon Activiy & Fragmetn. Ensuite, vous êtes libre de les utiliser Niveau.De BASE, qui vous permettra de revenir à quelque chose comme ceci:
Pouvez-vous trouver le code d'état 200 OK à l'intérieur? Qui est-il 🙂
Il y a aussi un autre, Niveau.Les en-TÊTES de, qui ne sera de retour l'en-tête du réseau. Ya bien sûr une autre photo ici:
C'est tout de la Journalisation de l'astuce 😉
Et je voudrais que vous partagez avec le tutoriel, j'ai beaucoup appris il y. Ils ont un tas de grande poste de parler de presque tout ce qui concerne la Rénovation, et ils continuent à jour le poste, dans le même temps, de Rénovation 2.0 est à venir. Veuillez jeter un oeil à ces travaux, qui je pense va vous faire économiser beaucoup de temps.
Voici un
Interceptor
qui enregistre à la fois la demande et la réponse des organismes (à l'aide de Bois, basé sur un exemple de la OkHttp docs et des réponses):Essayez ceci:
Après cela, dans le
body
il est le JSON qui vous intéresse.String bodyString = response.body().string(); log(bodyString); response = response.newBuilder().body(ResponseBody.create(response.body().contentType(), bodyString)).build();
(Vous ne pouvez pas lire la réponse du corps plus d'une fois, de sorte que vous aurez à créer une nouvelle réponse avec le constructeur)Je ne sais pas si setLogLevel() sera de retour dans la finale de la version 2.0 de Rénovation mais pour l'instant, vous pouvez utiliser un intercepteur pour la journalisation.
Un bon exemple on peut trouver dans OkHttp wiki: https://github.com/square/okhttp/wiki/Interceptors
Pour ceux qui ont besoin de haut niveau de journalisation dans la Rénovation, l'utilisation de l'intercepteur comme ce
Courtoisie: https://github.com/square/retrofit/issues/1072#
Le principal problème auquel j'ai été confronté a été dynamique en ajoutant des en-têtes et la journalisation en debug logcat. J'ai essayé d'ajouter deux intercepteurs. L'un pour l'enregistrement et l'autre pour ajouter des en-têtes sur-le-aller (jeton d'autorisation). Le problème était que nous pouvons .addInterceptor ou .addNetworkInterceptor. Comme Jake Wharton m'a dit: "Réseau d'intercepteurs de viennent toujours après l'application d'intercepteurs. Voir https://github.com/square/okhttp/wiki/Interceptors". Donc, ici, est exemple de travail avec les en-têtes et les journaux:
Si vous utilisez Retrofit2 et okhttp3 ensuite, vous devez savoir que l'Intercepteur de travaux en file d'attente. Ajoutez donc loggingInterceptor à la fin, après vos autres Intercepteurs:
Vous pouvez également ajouter Facebook du Stetho et regarder le réseau des traces dans google Chrome:
http://facebook.github.io/stetho/
Puis ouvrez "chrome://inspecter" dans Chrome...
Kotlin Code
cela va créer une rénovation de l'objet avec l'exploitation forestière. sans la création d'objets distincts.
D'une meilleure façon de faire de ce droit, en Rénovation 2, ajouter l'enregistreur de intercepteur un networkInterceptor ce sera imprimée, le réseau des en-têtes et vos en-têtes personnalisés trop. La chose importante est de se rappeler que l'intercepteur de travail comme une pile et assurez-vous u ajouter l'enregistreur de données à la fin de tout.
Plus de la réponse, qui couvre près de tout, sauf de cet outil, l'un des plus cool des façons de voir le journal.
Il est Facebook est Stetho. C'est un superbe outil pour surveiller/journal de votre application à un réseau de trafic sur google chrome. Vous pouvez également trouver ici sur Github.
de Rénovation 2.0.2 le code est comme
Je l'ai trouvé moyen, pour l'Impression de Journaux en Rénovation
Fonctionne pour moi.
D'abord Ajouter la dépendance à construire.gradle:
mise en œuvre", com.squareup.okhttp3:enregistrement-intercepteur:3.12.1'
Tout en utilisant Kotlin vous pouvez ajouter la Journalisation de l'Intercepteur comme ceci :
hé les gars,j'ai déjà trouver solution: