Kotlin Everywhere - Simple CRUD Android App with Kotlin andhikayuana

Kotlin Everywhere : Android Fundamentals

Kotlin Everywhere - Build Simple CRUD Android App with Kotlin

Lanjutan 

Dari tutorial sebelumnya yang berada di 

Lanjut kita akan melakukan implementasi konsumsi API dari suatu Backend. tak perlu berlama - lama, langsung aja yak step selanjutnya 

kita tambahkan dependensi yang dibutuhkan untuk konsum suatu API pada file build.gradle pada level app, kali ini kita gunakan Retrofit.

implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'

kemudian klik sync project with gradle files 

 

setelah proses sinkronisasi selesai, kita akan membuat struktur seperti di bawah ini

.
├── App.kt
├── DetailProductActivity.kt
├── MainActivity.kt
├── adapter
│   └── ListProductAdapter.kt
├── data
│   ├── model
│   │   └── Product.kt
│   ├── remote
│   │   ├── BelanjaApi.kt
│   │   └── response
│   │   ├── ProductResponse.kt
│   │   └── ProductsResponse.kt
│   └── repository
│   └── ProductRepository.kt
└── ext
└── Toaster.kt

7 directories, 10 files

dengan memindahkan berkas sebelumnya ke package yang dikehendaki seperti di atas dan membuat berkas baru (masih kosongan)

Instalasi Plugin

Untuk mempermudah proses parsing response dari suatu API, kita bisa menggunakan suatu generator yang beranama JsonToKotlinClass yang ada di marketplace plugin pada Android Studio -> Preferences -> Plugins -> JsonToKotlinClass, pasang

JsonToKotlinClass

Dokumentasi API

Kali ini kita akan menggunakan Rest API dari proyek ini https://github.com/andhikayuana/belanja-api, di sana juga sudah ada dokumentasinya dan bisa dicoba secara online dengan mengakses BASE_URL https://belanja-api.herokuapp.com/. Berikut merupakan response jika anda mengakses link tersebut 

{
    "code": 200,
    "msg": "Success",
    "data": {
        "name": "Belanja API Demo",
        "version": "1.0.0"
    }
}

Untuk endpoint yang kita gunakan yaitu

#GET /products get all products
#response
{ "code": 200, "msg": "Success", "data": [ { "id": 1, "name": "Sandal Mahal", "price": 5000000, "image": "https://anu.com/images/sandal-mahal.jpg" }, { "id": 2, "name": "Baju Mahal", "price": 8000000, "image": "https://anu.com/images/baju-mahal.jpg" } ] }
 #POST /products
#request
{ "name": "Sepatu Mahal Banget", "price": 6000000, "image": "http://anu.com/images/weird-shoes-3-1.jpg" }
#response
{ "code": 200, "msg": "Success", "data": { "name": "Sepatu Mahal Banget", "price": 6000000, "image": "http://anu.com/images/weird-shoes-3-1.jpg", "id": 4 } }
 #PUT /products/{id} 
#request
{ "name": "Sepatu Mahal wkwk", "price": 2500000, "image": "https://anu.com/weird-and-funny-shoes02.jpg" }
#response
{ "code": 200, "msg": "Success", "data": { "id": 4, "name": "Sepatu Mahal wkwk", "price": 2500000, "image": "https://anu.com/weird-and-funny-shoes02.jpg" } }
 #DELETE /products/{id}
#response
{ "code": 200, "msg": "Success", "data": [] }

Buatlah Singleton class seperti berikut  

https://github.com/andhikayuana/BelanjaApp/blob/master/app/src/main/java/id/belanja/app/data/remote/BelanjaApi.kt

Setelah membuat BelanjaApi.kt, sekarang kita generate class untuk responsenya dari API menggunakan plugin yang sudah terpasang sebelumnya atau bisa copy-paste berikut ini

Kemudian modelnya kita ubah seperti berikut ini

https://github.com/andhikayuana/BelanjaApp/blob/master/app/src/main/java/id/belanja/app/data/model/Product.kt

Kotlin Extension

Kotlin memiliki kemampuan untuk melakukan extends suatu class dengan function baru tanpa harus mewarisi dari class. gimana ? pusing :D

seperti ini kalo di tulis di dalam kode

//extensions
fun
Int.triple()
: Int { return this * 3

//implementation
var result = 3.triple()

 Seolah kita langsung memiliki fungsi triple() pada tipe data Int. Langsung saja, kita akan membuat ekstensi untuk melakukan Toast pada komponen android.

https://github.com/andhikayuana/BelanjaApp/blob/master/app/src/main/java/id/belanja/app/ext/Toaster.kt

nantinya kita bisa gunakan ekstensi tersebut pada suatu Activity misalnya, seperti

"Hello World!".toast([email protected])

Repository

Ini merupakan salah satu Design Pattern yang sering digunakan untuk melakukan baca/tulis/modifikasi suatu data pada dunia pemrograman.

Buat class repository sebagai wrapper API yang akan kita konsum nantinya

https://github.com/andhikayuana/BelanjaApp/blob/master/app/src/main/java/id/belanja/app/data/repository/ProductRepository.kt

Implementation with Refactoring 

Selanjutnya kita implementasikan pada class yang sudah kita buat

 Selamat mencoba!

This article was updated on September 21, 2019

Comments