یه برنامه نویس عاشق یادگیری.
لاگ گیری از ریکوئست های Retrofit
زمانیکه حرف ریکوئستهای سمت سرور پیش میآید، همیشه با دیتاهایی به شکل JSON مواجه میشویم.
لاگ گرفتن دستی از خروجیهای تمامی ریکوئستها، کار سخت و زمانگیری است. این کار موجب میشود نه تنها کدها زیاد شوند بلکه نگهداری آنها نیز سختتر میشود.
اگر از کتابخانه Retrofit برای ارسال و دریافت ریکوئستهایتان از سرور استفاده میکنید، این کتابخانه یک ویژگی فوق العاده به نام Interceptorها دارد. Interceptor به معنای دخالتگر است. این ویژگی زمانیکه هنوز Interfaceهای معروف Retrofit یعنی OnResponse و OnFailure جوابی در اختیار ما قرار نداند، دخالت میکند.
کاری که این کتابخانه انجام میدهد، لاگ گرفتن از خروجی ریکوئست هر چیزی و با هر فرمتی است. این بدین معنی است که نیازی نیست شما دستی، تک تک ریکوئستها را لاگ گیری کنید.
مراحل پیاده سازی را یک به یک جلو میرویم.
اضافه کردن کتابخانه به پروژه
می توانید از این صفحه نسخه آخر این کتابخانه را پیدا کنید.
implementation("com.squareup.okhttp3:logging-interceptor:4.8.1")
ایجاد و تخصیص سطح دسترسی
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
اگر میخواهید لاگها فقط زمانی نمایش داده شوند که اپلیکیشن در مرحله دیباگ (نه ریلیز) است، از این تکه کد استفاده کنید. (پیشنهاد من: تنظیمات زیر را حتما اعمال کنید)
if (BuildConfig.DEBUG) {
interceptor.level(HttpLoggingInterceptor.Level.BODY);
} else {
interceptor.level(HttpLoggingInterceptor.Level.NONE);
}
اضافه کردن Interceptor به OkHttpClient.Builder
OkHttpClient.Builder httpClientBuilder = new OkHttpClient().newBuilder().addInterceptor(interceptor);
تماااام.
شما به همین راحتی میتوانید این کار را انجام دهید. زمانیکه ریکوئستی ارسال یا دریافت میشود، در Logcat عبارت okhttp را بنویسید تا لاگ ریکوئستهای شما نمایش داده شود.
به عنوان مثال
پی نوشت
در صفحه خود این کتابخانه به این موضوع اشاره شده است که چون Header و بعضی از دیتاهای حیاتی و مهم را هم لاگ گیری میکند، مواظب نوع استفاده از این کتابخانه باشید. این کتابخانه برای این مشکل هم یک راهحل ارائه داده است. شما میتوانید کلمه کلیدی خود را برای اینکه در لاگها نمایش داده نشود، با استفاده از تکه کد زیر اضافه کنید.
بدین صورت:
logging.redactHeader("Authorization");
logging.redactHeader("Cookie");
میتوانید کد کامل کلاس را اینجا پیدا کنید.
به نظر شما چه کدها و روشهای جایگزینی برای این موضوع وجود دارد؟ شما روش بهتری برای این کار سراغ دارید؟
مطلبی دیگر از این انتشارات
تجربه ی 1- ساله یک برنامه نویس اندروید (نوشته ایی پویا)
مطلبی دیگر از این انتشارات
هی یو ! دلار در بیار , ریال خرج کن :)
مطلبی دیگر از این انتشارات
فوت و فنهای شیء-گرایی: استفاده از Starter در اندروید