Retrofit
Retrofit adalah sebuah library yang digunakan untuk mempermudah proses pertukaran data antara aplikasi android dengan server melalui REST API. Berikut ini referensi yang dapat digunakan untuk mempelajari retrofit silahkan dipelajari sendiri :
Praktikum Get Data dari REST API
Pada praktikum ini akan dipelajari mengai cara melakukan request GET ke suatu endpoint. Endpoint yang digunakan adalah : https://mobile.putraprima.id
Catatan : Google menyaratkan semua server yang diakses oleh aplikasi android menggunakan protokol http yang secure (di enkripsi) maka server yang digunakan harus menggunakan https.
Gradle
Perhatikan build.gradle pada module app :
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "id.putraprima.retrofit"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
targetCompatibility = "8"
sourceCompatibility = "8"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.7.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
//recyclerview
implementation 'androidx.recyclerview:recyclerview:1.1.0'
//material design
implementation "com.google.android.material:material:1.2.0-alpha05"
}
Perhatikan tambahan dependencies dan compileOptions, pada tahap ini ditambahkan dependency retrofit, converter dan logging interceptor, serta pada compileOptions ditambahkan target dan source compatibility.
Package pada source code
Perhatikan file tree berikut ini
├── api
│ ├── helper
│ │ └── ServiceGenerator.java
│ ├── models
│ │ └── AppVersion.java
│ └── services
│ └── ApiInterface.java
└── ui
├── MainActivity.java
└── SplashActivity.java
Package pada starter code dibagi sesuai dengan kebutuhan, dibagi menjadi dua package utama yaitu api
danui
.
Package api
berisi beberapa package lagi yaitu helper
, models
dan services
.
helper
berisi ServiceGenerator.java.models
berisi model yang akan digunakan pada aplikasi.services
berisi interface yang berisi endpoint yang akan diakses.
Package ui
berisi activity yang digunakan pada aplikasi ini.
ServiceGenerator
public class ServiceGenerator {
private static final String BASE_URL = "https://mobile.putraprima.id";
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create());
private static Retrofit retrofit = builder.build();
private static HttpLoggingInterceptor logging =
new HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY);
private static OkHttpClient.Builder httpClient =
new OkHttpClient.Builder();
public static <S> S createService(
Class<S> serviceClass) {
if (!httpClient.interceptors().contains(logging)) {
httpClient.addInterceptor(logging);
builder.client(httpClient.build());
retrofit = builder.build();
}
return retrofit.create(serviceClass);
}
}
Class ini adalah class yang berfungsi melakukan generate terhadap service endpoint retrofit, Detail tutorial mengenai service generator dan kenapa menggunakan service generator dapat anda pelajari lebih lanjut pada tutorial berikut ini.
AppVersion
Berikut ini kode program AppVersion.java, file ini adalah model dari endpoint yang diakses.
public class AppVersion {
String app;
String version;
public AppVersion(String app, String version) {
this.app = app;
this.version = version;
}
public String getApp() {
return app;
}
public void setApp(String app) {
this.app = app;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
Kode program diatas adalah hasil mapping dari response json yang di request ke endpoint https://mobile.putraprima.id/, berikut ini raw json hasil requestnya :
{
"app": "Laravel",
"version": "1.0.0"
}
Perhatikan cara mapping dari json ke class model.
ApiInterface
Daftar endpoint yang diakses dan method yang digunakan serta parameter yang dikirim untuk mengakses endpoit di daftarkan pada file ini, perhatikanlah dengan seksama kode program berikut ini :
public interface ApiInterface{
@GET("/")
Call<AppVersion> getAppVersion();
}
Pada interface di atas terdapat sebuah annotation @GET("/") ini menunjukkan bahwa method getAppVersion digunakan untuk mengakses endpoint "/" menggunakan HTTP verb GET dan menggunakan class AppVersion sebagai class model datanya. Pada ApiInterface ini anda dapat menambahkan endpoint lain sesuai kebutuhan dan sesuai dengan HTTP verb nya, untuk memahami HTTP verb dan kegunaannya dalam pembuatan endpoint dapat anda baca lebih lanjut pada tutorial berikut ini.
SplashActivity
Pada splash activity digunakan semua class yang dibuat sebelumnya untuk mengakses endpoint "/", perhatikan fungsi berikut yang ada pada starter code :
private void checkAppVersion() {
ApiInterface service = ServiceGenerator.createService(ApiInterface.class);
Call<AppVersion> call = service.getAppVersion();
call.enqueue(new Callback<AppVersion>() {
@Override
public void onResponse(Call<AppVersion> call, Response<AppVersion> response) {
Toast.makeText(SplashActivity.this, response.body().getApp(), Toast.LENGTH_SHORT).show();
//Todo : 2. Implementasikan Proses Simpan Data Yang didapat dari Server ke SharedPreferences
//Todo : 3. Implementasikan Proses Pindah Ke MainActivity Jika Proses getAppVersion() sukses
Intent i = new Intent(getApplicationContext(),MainActivity.class);
startActivity(i);
}
@Override
public void onFailure(Call<AppVersion> call, Throwable t) {
Toast.makeText(SplashActivity.this, "Gagal Koneksi Ke Server", Toast.LENGTH_SHORT).show();
//Todo : 4. Implementasikan Cara Notifikasi Ke user jika terjadi kegagalan koneksi ke server silahkan googling cara yang lain selain menggunakan TOAST
}
});
}
Kode program diatas di instansiasi kan service generator untuk call retrofit, kemudian pada proses call digunakan callback yang dipanggil secara asynchronous.