آموزش Retrofit 2 در اندروید - قسمت ۲

در قسمت اول از آموزش Retrofit در اندروید به کلیات چگونگی استفاده از رتروفیت پرداختیم. به طور حتم اگه در استفاده از رتروفیت تازه کار باشید نکات مبهم بسیاری در قسمت اول وجود داره که در این پست سعی می‌کنم کمی بیشتر در مورد اونها توضیح بدم.

۱- رتروفیت چطور json دریافتی از سرور رو تبدیل به Object (شئ) می‌کنه؟

پاسخ اینجاست که رتروفیت اینکار رو نمیکنه، بلکه وظیفه این تبدیل رو کتابخانه‌ای مثل Gson بر عهده داره. روش کارش هم به این صورته که شرح می‌دم.

ابتدا لازمه وابستگی‌های زیر رو به فایل build.gradle ماژول app برنامه‌تون اضافه کنید.

dependencies {
    compile 'com.google.code.gson:gson:2.8.2' // همیشه فکر خوبیه که وابستگی به کتابخانه اصلی رو به صورت مستقل هم داشته باشیم
    compile "com.squareup.retrofit2:converter-gson:2.3.0"
}

خط اول که خوب کتابخانه اصلی Gson رو وارد پروژه می‌کنه و خط دوم تبدیل کننده مخصوص Gson برای Retrofit هست. این تبدیل کننده پل اصلی ارتباط Retrofit و Gson هستش.

حالا در مرحله دوم باید این تبدیل کننده رو به Retrofit بشناسونیم. در قسمت اول اون قسمت که یک نمونه از Retrofit می‌ساختیم که یادتون هست؟

retrofit = new Retrofit.Builder().build();

فقط کافیه به صورت زیر converter رو به رتروفیت معرفی کنیم.

retrofit = new Retrofit.Builder()
      .addConverterFactory(GsonConverterFactory.create())
      .build();

۲- چطور فقط یکبار Retrofit رو بسازیم و همه جا ازش استفاده کنیم؟

در قسمت اول ما به صورت موقت آبجکت رتروفیت رو داخل Activity ایجاد کردیم که خوب مسلما روش درستی نیست. چرا که مجبوریم در Activityهای مختلف هر بار این آبجکت رو از اول بسازیم. راه حل این مشکل در این مرحله می‌تونه این باشه که ما یکبار آبجکت رو در کلاس Application ایجاد کنیم و ساختن آبجکت رتروفیت رو بسپاریم به Application. احتمالا به نحوه ساخت کلاس Application آشنایی دارید پس توضیح بیشتری در این مورد نمیدم و فقط به نمونه کد زیر بسنده می‌کنم.

public class MyApp extends Application {
   private static MyApi myApi;
   private static Retrofit retrofit;

   @Override
   public void onCreate() {
      super.onCreate();
      createMyRetrofitInstance();
   }

   private void createMyRetrofitInstance() {
      retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .build();
      myApi = retrofit.create(MyApi.class);
   }

   public static MyApi getMyApi() {
      return myApi;
   }

   public static Retrofit getRetrofit() {
      return retrofit;
   }
}

پس از اون کافیه هربار موقع استفاده خیلی راحت مثل کد زیر عمل کنیم.

MyApp.getMyApi().getPosts().enqueue(...);

در نهایت مطمئنا نکات زیاد دیگه‌ای هست که میشه در موردش صحبت کرد که در پست‌های بعدی و تکمیلی در موردش خواهم نوشت. اگر سوالی بود حتما کامنت بذارید.