Membuat ServiceGenerator
- Tambahkan class
ServiceGenerator
pada packagegenerator
Pada class tersebut, tambahkan konstanta
BASE_URL
yang berisi url dari API yang akan di-consume.private static final String BASE_URL = "https://api.chucknorris.io/";
Pada class ini akan digunakan pattern singleton, sehingga digunakan akses private pada constructor. Hal ini bertujuan untuk menghindari instansiasi dengan keyword
new
. Tambahkan constructor berikut pada class.private ServiceGenerator() {}
Tambahkan sebuah factory yang digunakan untuk menggantikan fungsi constructor. Hal ini untuk menjamin bahwa hanya satu buah instance saja yang akan di instansiasi. Tetapi sebelumnya, tambahkan atribut dependencies yang dibutuhkan untuk melakukan instansiasi library Retrofit.
private static Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()); private static Retrofit retrofit = builder.build(); // Digunakan untuk intercept request/response HTTP private static HttpLoggingInterceptor logging = new HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BODY); private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
Catatan: HTTP Logging digunakan untuk keperluan debugging, sehingga bisa melihat hasil response pada tab Logcat.
public static <Service> Service createService(Class<Service> serviceClass) { if (!httpClient.interceptors().contains(logging)) { httpClient.addInterceptor(logging); builder.client(httpClient.build()); retrofit = builder.build(); } return retrofit.create(serviceClass); }