Saya mencoba untuk mendapatkan JSON persis yang dikirim dalam permintaan. Ini kode saya:
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();
Tapi saya hanya melihat ini di log:
request:
com.squareup.okhttp.RequestBody$1@3ff4074d
headers:
Content-Type: application/vnd.ll.event.list+json
Bagaimana saya seharusnya melakukan pencatatan yang benar, mengingat penghapusan setLog()
dan setLogLevel()
yang kami gunakan dengan Retrofit 1?
Saya bertemu hal itu ketika Anda dan saya mencoba bertanya kepada penulis buku Retrofit: Cinta bekerja dengan API di Android (di sini adalah tautannya ) (tidak! Saya tidak membuat beberapa iklan untuk mereka .... tetapi mereka benar-benar baik guys :) Dan penulis membalas saya segera, dengan kedua metode Log pada Retrofit 1.9 dan Retrofit 2.0-beta.
Dan di sini adalah kode Retrofit 2.0-beta:
Ini adalah cara menambahkan metode logging dengan bantuan HttpLoggingInterceptor . Juga jika Anda adalah pembaca buku yang saya sebutkan di atas, Anda mungkin menemukan bahwa dikatakan tidak ada lagi metode log dengan Retrofit 2.0 - yang, saya tanyakan kepada penulis, tidak benar dan mereka akan memperbarui buku tahun depan dengan berbicara tentang itu.
// Jika Anda tidak terbiasa dengan metode Log di Retrofit, saya ingin membagikan sesuatu yang lebih.
Juga harus diperhatikan bahwa ada beberapa Level Logging yang bisa Anda pilih. Saya menggunakan Level. Tubuh sebagian besar waktu, yang akan memberikan beberapa hal seperti ini:
Anda dapat menemukan hampir semua staf http di dalam gambar: header, konten dan respons, dll.
Dan kadang-kadang Anda benar-benar tidak perlu semua tamu untuk menghadiri pesta Anda: Saya hanya ingin tahu apakah itu berhasil terhubung, bahwa panggilan internet berhasil dilakukan dalam Activiy & Fragmetn saya. Maka Anda bebas menggunakan Level.BASIC , yang akan mengembalikan sesuatu seperti ini:
Dapatkah Anda menemukan kode status 200 OK di dalam? Hanya itu saja :)
Juga ada satu lagi, Level.HEADERS , yang hanya akan mengembalikan header jaringan. Ya tentu saja gambar lain di sini:
Itu semua trik Logging;)
Dan saya ingin membagikan kepada Anda tutorial yang saya pelajari banyak di sana . Mereka memiliki banyak posting hebat yang berbicara tentang hampir semua yang berhubungan dengan Retrofit, dan mereka terus memperbarui posting tersebut, pada saat yang sama Retrofit 2.0 akan datang. Silakan lihat pekerjaan itu, yang saya pikir akan menghemat banyak waktu.
sumber
Berikut ini adalah
Interceptor
yang mencatat badan permintaan dan respons (menggunakan Timber, berdasarkan contoh dari dokumen OkHttp dan beberapa jawaban SO lainnya):sumber
Coba ini:
Setelah ini, di
body
sana ada JSON yang Anda minati.sumber
String bodyString = response.body().string(); log(bodyString); response = response.newBuilder().body(ResponseBody.create(response.body().contentType(), bodyString)).build();
(Anda tidak dapat membaca tubuh respons lebih dari sekali, jadi Anda harus membuat respons baru dengan pembuat)Masalah utama yang saya hadapi adalah menambahkan dinamis header dan masuk ke debug logcat. Saya sudah mencoba menambahkan dua interceptor. Satu untuk masuk dan satu untuk menambahkan tajuk saat bepergian (otorisasi token). Masalahnya adalah bahwa kita mungkin .addInterceptor atau .addNetworkInterceptor. Seperti yang dikatakan Jake Wharton kepada saya: "Pencegat jaringan selalu datang setelah pencegat aplikasi. Lihat https://github.com/square/okhttp/wiki/Interceptors ". Jadi, inilah contoh yang berfungsi dengan header dan log:
sumber
Saya tidak tahu apakah setLogLevel () akan kembali dalam versi 2.0 final Retrofit tetapi untuk sekarang Anda dapat menggunakan interseptor untuk masuk.
Contoh yang baik dapat ditemukan di wiki OkHttp: https://github.com/square/okhttp/wiki/Interceptors
sumber
Jika Anda menggunakan Retrofit2 dan okhttp3 maka Anda perlu tahu bahwa Interceptor bekerja berdasarkan antrian. Jadi, tambahkan loggingInterceptor di bagian akhir, setelah Interceptor lainnya:
sumber
Bagi mereka yang membutuhkan logging tingkat tinggi di Retrofit, gunakan interseptor seperti ini
Courtesy : https://github.com/square/retrofit/issues/1072#
sumber
Kode Kotlin
sumber
Anda juga dapat menambahkan Stetho Facebook dan melihat jejak jaringan di Chrome: http://facebook.github.io/stetho/
Lalu buka "chrome: // inspect" di Chrome ...
sumber
ini akan membuat objek retrofit dengan Logging. tanpa membuat objek terpisah.
sumber
Pertama Tambahkan ketergantungan ke build.gradle:
implementasi 'com.squareup.okhttp3: logging-interceptor: 3.12.1'
Saat menggunakan Kotlin Anda dapat menambahkan Penerima Logging seperti ini:
sumber
Set kode berikut berfungsi tanpa masalah bagi saya
Gradle
RetrofitClient
Anda juga dapat memverifikasi hasilnya dengan masuk ke Tab Profiler di bagian bawah Android Studio, lalu mengklik tanda + untuk Mulai Sesi Baru, lalu pilih lonjakan yang diinginkan di "Jaringan". Di sana Anda bisa mendapatkan semuanya, tetapi rumit dan lambat. Silakan lihat gambar di bawah ini.
sumber
Cara terbaik untuk melakukan ini dengan benar di Retrofit 2 adalah dengan menambahkan interseptor logger sebagai networkInterceptor ini akan mencetak header jaringan dan header kustom Anda juga. Yang penting adalah untuk mengingat bahwa pencegat bekerja sebagai tumpukan dan pastikan Anda menambahkan logger di akhir semua.
sumber
Sebagian besar jawabannya di sini mencakup hampir semua hal kecuali alat ini, salah satu cara paling keren untuk melihat log.
Ini adalah Facebook Stetho . Ini adalah alat yang luar biasa untuk memonitor / mencatat lalu lintas jaringan aplikasi Anda di google chrome . Anda juga dapat menemukan di sini pada Github.
sumber
untuk Retrofit 2.0.2 kodenya seperti
sumber
Berikut adalah cara sederhana untuk memfilter setiap permintaan / tanggapan dari log menggunakan
HttpLoggingInterceptor
:Inilah inti lengkapnya:
https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168
sumber
Saya juga terjebak dalam situasi yang serupa,
setLevel()
metode tidak datang, ketika saya mencoba menyebutnya dengan contoh HttpLoggingInterceptor, seperti ini:Inilah cara saya mengatasinya, untuk menghasilkan log untuk Retrofit2,
Saya kira Anda telah menambahkan ketergantungan,
Untuk versi terbaru yang dapat Anda periksa, tautan ini:
https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor )
Di sini mereka juga menjelaskan tentang cara menambahkan.
Saya membuat kelas dengan nama
AddLoggingInterceptor
, ini kode saya,Lalu, di mana kita membuat Institusi kita,
Sekarang Anda dapat melihat log yang dihasilkan di Android Studio Anda, Anda mungkin perlu mencari,
okHttp
untuk proses penyaringan. Ini berhasil untuk saya. Jika ada masalah, Anda dapat mengirim saya SMS di sini.sumber
Saya menemukan cara untuk Print Log di Retrofit
Bekerja untukku.
sumber
Interceptor Retrofit adalah fitur hebat yang memungkinkan Anda bekerja dengan permintaan http. Ada dua jenis di antaranya: aplikasi dan pencegat jaringan.
Saya akan merekomendasikan untuk digunakan
Charles Web Debugging Proxy Application
jika Anda perlu mencatat permintaan / tanggapan Anda. Outputnya sangat mirip dengan Stetho tetapi itu adalah instrumen yang lebih kuat yang tidak perlu Anda tambahkan sebagai ketergantungan pada aplikasi.sumber
hai teman-teman, saya sudah menemukan solusi:
sumber