23 September 2017

Using Retrofit to build HTTP Client on Android

Untuk berkomunikasi dengan remote server, kamu bisa menggunakan java 3th party library 'Retrofit'. Dengan library ini kamu bisa mengirim dan menerima data ke dan dari remote server dalam bentuk JSON. Retrofit adalah library favorit saya karena mudah sekali untuk menggunakannya. Disini saya akan merangkum step-step bagaimana kamu bisa menggunakan retrofit dengan cepat di project kamu

  1. Tambahkan internet permission ke dalam manifest XML file.
  2. <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.appName">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
    ...
    </activity
    </application>
    </manifest>
    view raw manifest.xml hosted with ❤ by GitHub
  3. Tambahkan Retrofit dan Gson kedalam gradle build file
  4. dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    testCompile 'junit:junit:4.12'
    }
    view raw app.gradle hosted with ❤ by GitHub
  5. Buat Object class yang akan di kirim atau di terima sebagai JSON file, jangan lupa bahwa semua fieldnya harus di declared dengan tipe String
  6. public class User {
    //dont forget to add @SerializedName annotation, the parameter is the Objectproperty name
    @SerializedName("name")
    private String name;
    @SerializedName("email")
    private String email;
    //getters
    public String getName() {
    return name;
    }
    public String getEmail() {
    return email;
    }
    }
    view raw User.java hosted with ❤ by GitHub
  7. Buat ApiClient class
  8. public class ApiClient {
    //this is the localhost url if you run the app using emulators
    public static final String BASE_URL = "http://10.0.2.2/";
    public static Retrofit retrofit = null;
    public static Retrofit getApiClient(){
    if(retrofit == null){
    retrofit = new Retrofit.Builder().baseUrl(BASE_URL).
    addConverterFactory(GsonConverterFactory.create()).build();
    }
    return retrofit;
    }
    }
    view raw ApiClient.java hosted with ❤ by GitHub
  9. Definisikan API Interface
  10. public interface ApiInterface {
    // the parameter of get is the endpoint of the url.
    // if your url is http://localhost:3000/users will looks like this
    // Use a 'List' if you are fetching an array of Users
    @GET("users")
    Call<List<User>> getUsers();
    }
  11. Gunakan ApiClient di Aplikasi kamu
  12. private fetchData(){
    apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
    Call<List<User>> call = apiInterface.getSomething();
    call.enqueue(new Callback<List<User>>() {
    @Override
    public void onResponse(Call<List<User>> call, Response<List<User>> response) {
    List<User> list = response.body();
    Log.d(TAG, "onResponse: " + list.get(0).getText());
    }
    @Override
    public void onFailure(Call<List<User>> call, Throwable t) {
    Log.d(TAG, "onFailure: " + t.getMessage());
    }
    });
    }
    view raw Activity.java hosted with ❤ by GitHub

Terkadang kamu harus membuat suatu class tambahan yang bisa menampung respon object dari server. Misal, kamu mengirim ("POST") user data melalui User object, akan tetapi jawaban (respond) dari server memiliki properties yang berbeda dari User class. Kamu bisa membuat Class Result yang bisa menampung respon dari server kemudian kamu bisa menambahkan Result Object kedalam Class User. Tool yang saya pakai untuk membuat Result class ini adalah JsonSchemaToPOJO Caranya mudah, masukan respon (JSON) yang kamu dapatkan dari aplikasi POSTMAN kedalam formular yang ada di Json2Pojo.