Last Updated on 2 years by Mas Herdi
Oke, setelah sebelumnya saya membuat tutorial melakukan HTTP GET menggunakan Retrofit di Android, baik itu HTTP GET tanpa params, maupun HTTP GET dengan parameters, kali ini kita akan melakukan satu request yang juga sudah umum ada pada REST API, yaitu melakukan request HTTP POST form-url-encoded menggunakan Retrofit 2 di Android.
HTTP POST adalah sebuah method pada REST API yang biasanya digunakan ketika kita ingin mensubmit data dalam bentuk form. Untuk tutorial Retrofit HTTP POST kali ini, saya akan menggunakan API sederhana yang sudah saya buat sebagai endpoint, yang bisa diakses di
http://twohgo.appspot.com/v1/
Pre-Requisites
Oke, sebelum kita mulai ada baiknya kalian membaca dulu pre-requisites di bawah ini :
- Membuat Proyek Android Baru di Android Studio
- Melakukan HTTP GET Request Tanpa Param di Retrofit Android
- Melakukan HTTP GET Request Dengan Query Param di Retrofit Android
HTTP POST Form Submit Menggunakan Retrofit 2 di Android
Karena tutorial ini juga sebenarnya melanjutkan tutorial sebelumnya, kalian diharuskan membaca juga pre-requisites di atas supaya gampang mengikuti.
Seperti biasa, pertama-tama kita tambahkan dependencies Retrofit di build.gradle dan juga permission Internet pada AndroidManifest.xml. Cara menambahkannya bisa kalian lihat di tutorial sebelumnya tentang HTTP GET pada Retrofit.
Setelah itu, karena BASE URL yang digunakan tidak berubah dari tutorial sebelumnya :), maka kita akan langsung lanjut ke
Membuat Interface Retrofit2 API Service untuk HTTP POST
Untuk tutorial HTTP POST ini, endpoint yang akan kita akses beralamat di :
https://twohgo.appspot.com/v1/post_message
Jangan khawatir ketika kalian buka muncul 404 page not found, karena saat ini halaman tersebut hanya bisa diakses lewat HTTP POST saja. Menyesuaikan itu, maka kita akan menambahkan satu endpoint baru pada file TWOHAPIService.java, seperti berikut :
import java.util.HashMap; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.QueryMap; /** * Created by Hafizh Herdi on 10/15/2016. */ public interface TWOHAPIService { //... rest of code @FormUrlEncoded @POST("post_message") Call<ResponseBody> postMessage(@FieldMap HashMap<String, String> params); }
Bisa dilihat pada kode di atas, jika HTTP GET kita menggunakan QueryMap, seperti di tutorial sebelumnya, maka untuk HTTP POST ini kita menggunakan FieldMap untuk tempat parameters yang akan ditembakkan ke endpoint. Sedangkan ada anotasi @FormUrlEncoded, karena params itu akan ditembakkan dengan terlebih dulu di-encode sesuai dengan standar URL encoding. Akan ditambahkan pula informasi mime type application/x-www-form-urlencoded pada header ketika kita melakukan HTTP POST request.
Melakukan API HTTP POST Request Menggunakan Retrofit
Jika sudah, langsung saja kita ke file MainActivity.java dan menginisialisasi variable retrofit :
private Retrofit retrofit; private void initializeRetrofit(){ retrofit = new Retrofit.Builder() .baseUrl(Const.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); }
Kemudian kita akan menjalankan method ini ketika ingin melakukan HTTP POST Request.
private void postMessage(){ HashMap<String, String> params = new HashMap<>(); params.put("username", "elisabeth"); params.put("message", "Hey, what are you doing?"); params.put("sex", "female"); params.put("age", "21"); TWOHAPIService apiService = twohRetro.create(TWOHAPIService.class); Call<ResponseBody> result = apiService.postMessage(params); result.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { dialog.dismiss(); try { if(response.body()!=null) Toast.makeText(MainActivity.this," response message "+response.body().string(),Toast.LENGTH_LONG).show(); }catch (Exception e){ e.printStackTrace(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { dialog.dismiss(); t.printStackTrace(); } }); }
Jika dilihat snippet code untuk Retrofit HTTP POST di atas, tidak jauh berbeda dengan Retrofit HTTP GET pada tutorial sebelumnya. Kita hanya tinggal mengisi params yang diminta kemudian mengikutsertakankan params tersebut ketika melakukan HTTP POST request.
Demo
Untuk demonya cukup straightforward, server hanya akan mengirimkan balik parameters yang sudah kita kirimkan lewat HTTP POST, seperti contoh di bawah ini :
That’s all, kalian bisa bereksperimen sendiri dengan mengubah-ubah parameters yang ditembakkan ke server. 🙂
Untuk lebih lanjutnya kalian bisa pelajari dari source code lengkapnya yang bisa kalian download langsung di GitHub saya. Jangan lupa follow dan star project nya ya, silahkan berkomentar apabila ada yang kurang dimengerti. ? Keep awesome ! ?