Last Updated on 2 years by Mas Herdi
Pada beberapa tutorial sebelumnya, kita telah belajar tentang bagaimana cara menggunakan Retrofit 2 di Android, baik itu melakukan HTTP GET request maupun HTTP POST request. Kali ini kita akan belajar cara mendapatkan Error response dari Retrofit, yang dikirimkan oleh server. Error response ini akan dikirimkan apabila ada parameter yang kurang, atau salah pada saat melakukan network HTTP request. Error response ini biasanya mempunyai HTTP status 400 yang berarti “bad request”.
Sebagai contohnya, pada API yang saya buat di :
https://twohgo.appspot.com/v1/storyofme
Apabila kalian langsung melakukan request GET tanpa memasukkan parameter apa-apa, maka akan muncul JSON Result seperti berikut :
{ message: "Required param : 'lastname'. ", status: 400 }
Sedangkan, apabila request nya benar / HTTP Request Code 200, response yang ditampilkan sebagai berikut :
https://twohgo.appspot.com/v1/storyofme?firstname=hafizh&lastname=herdi
{ message: "Hello hafizh from the house herdi! That's your story!", status: 200 }
Nah sekarang bagaimana cara menampilkan error response tersebut dari sisi klien / Android saat mencoba mengakses? Jawabannya akan dibahas di tutorial ini 🙂
Menampilkan ErrorBody sebagai Error Response Retrofit 2 di Android
Sebelumnya, seperti biasa kalian diharuskan membaca terlebih dahulu tutorial-tutorial pre-requisites berikut ini :
Pre-requisites :
- 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
Oke, karena kita akan menggunakan project yang sama dengan utorial sebelumnya, jadi pastikan kalian sudah menyelesaikan tutorial-tutorial di atas terlebih dahulu. Jika sudah, buka Android Studionya dan langsung menuju ke file MainActivity.java. Di sana pada method queryJSON() kalian akan melihat codingan seperti di bawah ini :
TWOHAPIService apiService = twohRetro.create(TWOHAPIService.class); Call<ResponseBody> result = apiService.getStoryOfMe(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(); if(response.errorBody()!=null) Toast.makeText(MainActivity.this," response message "+response.errorBody().string(),Toast.LENGTH_LONG).show(); }catch (Exception e){ e.printStackTrace(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { dialog.dismiss(); t.printStackTrace(); } });
Bisa dilihat di atas, pada onResponse() dipanggil, akan dilakukan pengecekan pada Retrofit response.errorBody(). Dimana di bagian itulah error response dari server akan disimpan oleh Retrofit, dan untuk cara menampilkannya, kita cukup memanggil response.errorBody().string().
Demo
Untuk demonya, bisa coba dengan mengirimkan param kosong pada saat kita mengakses endpoint di atas, dan hasilnya akan muncul JSON error result seperti berikut sebagai error response Retrofit :
That’s all ! 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 ! ?