Tutorial CRUD Rest API Menggunakan Retrofit 2 Android
Tutorial CRUD Rest API Menggunakan Retrofit 2 Android – Sebelum memulai project ini alangkah lebih baiknya kita mempunyai atau membuat terlebih dahulu Rest API untuk kebutuhan CRUD menggunakan retrofit 2 ini. Untuk cara membuat rest apinya agan bisa ke artikel Cara Membuat API CRUD Menggunakan Slim Framework. Jika Rest API sudah dibuat maka langkah selanjutnya agan bisa mulai dengan project androidnya. Project android disini kita lanjutkan dari project sebelumnya ya, nama projectnya “Mahasiswa App”. Mahasiswa App ini mempunyai fitur untuk melihat list dosen, tambah matkul, matkul apa saja yang sudah mahasiswa ambil dan menghapus mata kuliah yang sudah diambil oleh mahasiswa.

Tutorial CRUD Rest API Menggunakan Retrofit 2 Android
Jadi, didalam tutorial crud rest api menggunakan retrofit 2 ini agan akan belajar mengenai cara GET, POST, dan Delete menggunakan retrofit 2. Project Mahasiswa sebelumnya agan bisa dilihat di artikel : Tutorial Login dan Register Menggunakan Retrofit2 dan API Server.
Persiapan :
Rest API yang sudah siap :
1 2 3 4 5 |
GET localhost/mahasiswa/semuadosen : semua list dosen GET localhost/mahasiswa/dosen/{nama}: detail dosen GET localhost/mahasiswa/matkul : semua list matkul POST localhost/mahasiswa/matkul : untuk menambahkan matkul kedalam database DELETE localhost/mahasiswa/matkul/{id} : untuk mengapus matkul berdasarkan IDnya |
Tambahkan library retrofit 2 dan gson converter terlebih dahulu :
1 2 3 |
compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' |
Pertama,
Buat file model bernama ResponseDosen dan isi dengan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
@SerializedName("semuadosen") private List<SemuadosenItem> semuadosen; @SerializedName("error") private boolean error; @SerializedName("message") private String message; public void setSemuadosen(List<SemuadosenItem> semuadosen){ this.semuadosen = semuadosen; } public List<SemuadosenItem> getSemuadosen(){ return semuadosen; } public void setError(boolean error){ this.error = error; } public boolean isError(){ return error; } public void setMessage(String message){ this.message = message; } public String getMessage(){ return message; } @Override public String toString(){ return "ResponseDosen{" + "semuadosen = '" + semuadosen + '\'' + ",error = '" + error + '\'' + ",message = '" + message + '\'' + "}"; } |
dan buat file bernama SemuadosenItem dengan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
@SerializedName("nama") private String nama; @SerializedName("id") private String id; @SerializedName("matkul") private String matkul; public void setNama(String nama){ this.nama = nama; } public String getNama(){ return nama; } public void setId(String id){ this.id = id; } public String getId(){ return id; } public void setMatkul(String matkul){ this.matkul = matkul; } public String getMatkul(){ return matkul; } @Override public String toString(){ return "SemuadosenItem{" + "nama = '" + nama + '\'' + ",id = '" + id + '\'' + ",matkul = '" + matkul + '\'' + "}"; } |
Catatan :
Model tersebut disesuaikan dengan hasil json yang dihasilkan oleh API GET Semua Dosen.
Kedua,
Buka file BaseApiService lalu tambahkan kode berikut :
1 2 |
@GET("semuadosen") Call<ResponseDosen> getSemuaDosen(); |
Ketiga,
Tambahkan activity baru bernama DosenActivity. Di dosen activity ini berisi list-list dosen. Jika sudah terbuat buka activity_dosen.xml lalu tambahkan kode berikut :
1 2 3 4 5 6 7 8 |
<android.support.v7.widget.RecyclerView android:id="@+id/rvDosen" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="16dp"> </android.support.v7.widget.RecyclerView> |
Catatan :
Jangan lupa tambahkan library RecyclerView dan Cardview kedalam project agan ya. Jika belum agan bisa menambahkan code berikut di file gradle.app :
1 2 |
compile 'com.android.support:cardview-v7:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' |
Keempat,
Buatlah file layout xml bernama item_dosen. Lalu masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<android.support.v7.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:orientation="horizontal"> <ImageView android:id="@+id/ivTextDrawable" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center"/> <LinearLayout android:layout_marginLeft="8dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingRight="8dp" android:orientation="vertical"> <TextView android:id="@+id/tvNamaDosen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:textSize="16sp" android:fontFamily="sans-serif-condensed" tools:text="Fariz Ramadhan"/> <TextView android:id="@+id/tvNamaMatkul" android:layout_marginTop="6dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:fontFamily="sans-serif-light" tools:text="Android Programing"/> </LinearLayout> </LinearLayout> </android.support.v7.widget.CardView> |
Kelima,
Buatlah file bernama DosenAdapter.java. Lalu isikan dengan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
List<SemuadosenItem> semuadosenItemList; Context mContext; public String[] mColors = { "#39add1", // light blue "#3079ab", // dark blue "#c25975", // mauve "#e15258", // red "#f9845b", // orange "#838cc7", // lavender "#7d669e", // purple "#53bbb4", // aqua "#51b46d", // green "#e0ab18", // mustard "#637a91", // dark gray "#f092b0", // pink "#b7c0c7" // light gray }; public DosenAdapter(Context context, List<SemuadosenItem> dosenList){ this.mContext = context; semuadosenItemList = dosenList; } @Override public DosenHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dosen, parent, false); return new DosenHolder(itemView); } @Override public void onBindViewHolder(DosenHolder holder, int position) { final SemuadosenItem semuadosenitem = semuadosenItemList.get(position); holder.tvNamaDosen.setText(semuadosenitem.getNama()); holder.tvNamaMatkul.setText(semuadosenitem.getMatkul()); String namaDosen = semuadosenitem.getNama(); String firstCharNamaDosen = namaDosen.substring(0,1); TextDrawable drawable = TextDrawable.builder() .buildRound(firstCharNamaDosen, getColor()); holder.ivTextDrawable.setImageDrawable(drawable); } @Override public int getItemCount() { return semuadosenItemList.size(); } public class DosenHolder extends RecyclerView.ViewHolder{ @BindView(R.id.ivTextDrawable) ImageView ivTextDrawable; @BindView(R.id.tvNamaDosen) TextView tvNamaDosen; @BindView(R.id.tvNamaMatkul) TextView tvNamaMatkul; public DosenHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } public int getColor() { String color; // Randomly select a fact Random randomGenerator = new Random(); // Construct a new Random number generator int randomNumber = randomGenerator.nextInt(mColors.length); color = mColors[randomNumber]; int colorAsInt = Color.parseColor(color); return colorAsInt; } |
Catatan :
- Jangan lupa untuk meng-extend class dengan RecyclerView.Adapter<DosenAdapter.DosenHolder> ya.
- Jika ada error dibagian TextDrawable agan tinggal tambahkan library baru kedalam gradle.app. Tambahkan kode berikut :
1 |
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' |
Keenam,
Buka DosenActivity.java. Lalu tambahkan kode berikut tepat diatas onCreate :
1 2 3 4 5 6 7 8 |
@BindView(R.id.rvDosen) RecyclerView rvDosen; ProgressDialog loading; Context mContext; List<SemuadosenItem> semuadosenItemList = new ArrayList<>(); DosenAdapter dosenAdapter; BaseApiService mApiService; |
Lalu didalam onCreate tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 |
getSupportActionBar().setTitle("Dosen"); ButterKnife.bind(this); mContext = this; mApiService = UtilsApi.getAPIService(); dosenAdapter = new DosenAdapter(this, semuadosenItemList); RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this); rvDosen.setLayoutManager(mLayoutManager); rvDosen.setItemAnimator(new DefaultItemAnimator()); getResultListDosen(); |
Jika ada error dibagian getResultListDosen() silahkan tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
loading = ProgressDialog.show(this, null, "Harap Tunggu...", true, false); mApiService.getSemuaDosen().enqueue(new Callback<ResponseDosen>() { @Override public void onResponse(Call<ResponseDosen> call, Response<ResponseDosen> response) { if (response.isSuccessful()){ loading.dismiss(); final List<SemuadosenItem> semuaDosenItems = response.body().getSemuadosen(); rvDosen.setAdapter(new DosenAdapter(mContext, semuaDosenItems)); dosenAdapter.notifyDataSetChanged(); } else { loading.dismiss(); Toast.makeText(mContext, "Gagal mengambil data dosen", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<ResponseDosen> call, Throwable t) { loading.dismiss(); Toast.makeText(mContext, "Koneksi Internet Bermasalah", Toast.LENGTH_SHORT).show(); } }); |
Ketujuh,
Buatlah activity baru bernama MatkulActivity dan buka activity_matkul.xml lalu masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<Button android:id="@+id/btnTambahMatkul" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="tambah matkul"/> <TextView android:id="@+id/tvBelumMatkul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:layout_marginTop="16dp" android:text="Belum mengambil mata kuliah, Silahkan tambahkan terlebih dahulu"/> <android.support.v7.widget.RecyclerView android:id="@+id/rvMatkul" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp"> </android.support.v7.widget.RecyclerView> |
Kedelapan,
Buatlah file layout xml baru bernama item_matkul. Lalu masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<android.support.v7.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:orientation="horizontal"> <ImageView android:id="@+id/ivTextDrawable" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center"/> <LinearLayout android:layout_marginLeft="8dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingRight="8dp" android:orientation="vertical"> <TextView android:id="@+id/tvNamaDosen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:textSize="16sp" android:fontFamily="sans-serif-condensed" tools:text="Fariz Ramadhan"/> <TextView android:id="@+id/tvNamaMatkul" android:layout_marginTop="6dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:fontFamily="sans-serif-light" tools:text="Android Programing"/> </LinearLayout> </LinearLayout> </android.support.v7.widget.CardView> |
Kesembilan,
Buat class model baru bernama ResponseMatkul dan tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
@SerializedName("semuamatkul") private List<SemuamatkulItem> semuamatkul; @SerializedName("error") private boolean error; @SerializedName("message") private String message; public void setSemuamatkul(List<SemuamatkulItem> semuamatkul){ this.semuamatkul = semuamatkul; } public List<SemuamatkulItem> getSemuamatkul(){ return semuamatkul; } public void setError(boolean error){ this.error = error; } public boolean isError(){ return error; } public void setMessage(String message){ this.message = message; } public String getMessage(){ return message; } @Override public String toString(){ return "ResponseMatkul{" + "semuamatkul = '" + semuamatkul + '\'' + ",error = '" + error + '\'' + ",message = '" + message + '\'' + "}"; } |
dan buat kembali kelas model dengan nama SemuamatkulItem lalu masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
@SerializedName("nama_dosen") private String namaDosen; @SerializedName("id") private String id; @SerializedName("matkul") private String matkul; public void setNamaDosen(String namaDosen){ this.namaDosen = namaDosen; } public String getNamaDosen(){ return namaDosen; } public void setId(String id){ this.id = id; } public String getId(){ return id; } public void setMatkul(String matkul){ this.matkul = matkul; } public String getMatkul(){ return matkul; } @Override public String toString(){ return "SemuamatkulItem{" + "nama_dosen = '" + namaDosen + '\'' + ",id = '" + id + '\'' + ",matkul = '" + matkul + '\'' + "}"; } |
Catatan :
Model tersebut disesuaikan dengan hasil json yang dihasilkan oleh API GET Semua Dosen.
Kesepuluh,
Buka file BaseApiService lalu tambahkan kode berikut :
1 2 |
@GET("matkul") Call<ResponseMatkul> getSemuaMatkul(); |
Kesebelas,
Buatlah file baru bernama MatkulAdapter lalu tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
Context mContext; List<SemuamatkulItem> semuamatkulItemList; public String[] mColors = { "#39add1", // light blue "#3079ab", // dark blue "#c25975", // mauve "#e15258", // red "#f9845b", // orange "#838cc7", // lavender "#7d669e", // purple "#53bbb4", // aqua "#51b46d", // green "#e0ab18", // mustard "#637a91", // dark gray "#f092b0", // pink "#b7c0c7" // light gray }; public MatkulAdapter(Context context, List<SemuamatkulItem> matkulList) { this.mContext = context; semuamatkulItemList = matkulList; } @Override public MatkulAdapter.MatkulHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_matkul, parent, false); return new MatkulHolder(itemView); } @Override public void onBindViewHolder(MatkulAdapter.MatkulHolder holder, int position) { final SemuamatkulItem semuamatkulItem = semuamatkulItemList.get(position); holder.tvNamaDosen.setText(semuamatkulItem.getNamaDosen()); holder.tvNamaMatkul.setText(semuamatkulItem.getMatkul()); String namaDosen = semuamatkulItem.getNamaDosen(); String firstCharNamaDosen = namaDosen.substring(0,1); TextDrawable drawable = TextDrawable.builder() .buildRound(firstCharNamaDosen, getColor()); holder.ivTextDrawable.setImageDrawable(drawable); } @Override public int getItemCount() { return semuamatkulItemList.size(); } public class MatkulHolder extends RecyclerView.ViewHolder{ @BindView(R.id.ivTextDrawable) ImageView ivTextDrawable; @BindView(R.id.tvNamaDosen) TextView tvNamaDosen; @BindView(R.id.tvNamaMatkul) TextView tvNamaMatkul; public MatkulHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } public int getColor() { String color; // Randomly select a fact Random randomGenerator = new Random(); // Construct a new Random number generator int randomNumber = randomGenerator.nextInt(mColors.length); color = mColors[randomNumber]; int colorAsInt = Color.parseColor(color); return colorAsInt; } |
Catatan :
- Jangan lupa untuk meng-extend class dengan RecyclerView.Adapter<MatkulAdapter.MatkulHolder> ya
Keduabelas,
Buka file MatkulActivity lalu tambahkan kode berikut tepat diatas onCreate :
1 2 3 4 5 6 7 8 9 10 11 12 |
@BindView(R.id.btnTambahMatkul) Button btnTambahMatkul; @BindView(R.id.tvBelumMatkul) TextView tvBelumMatkul; @BindView(R.id.rvMatkul) RecyclerView rvMatkul; ProgressDialog loading; Context mContext; List<SemuamatkulItem> semuamatkulItemList = new ArrayList<>(); MatkulAdapter matkulAdapter; BaseApiService mApiService; |
Lalu didalam onCreate tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
getSupportActionBar().setTitle("Mata Kuliah"); ButterKnife.bind(this); mApiService = UtilsApi.getAPIService(); mContext = this; matkulAdapter = new MatkulAdapter(this, semuamatkulItemList); RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this); rvMatkul.setLayoutManager(mLayoutManager); rvMatkul.setItemAnimator(new DefaultItemAnimator()); getDataMatkul(); btnTambahMatkul.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MatkulActivity.this, TambahMatkulActivity.class)); } }); |
Jika getDataMatkul() merah buat method bernama getDatamatkul() lalu isi dengan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
loading = ProgressDialog.show(mContext, null, "Harap Tunggu...", true, false); mApiService.getSemuaMatkul().enqueue(new Callback<ResponseMatkul>() { @Override public void onResponse(Call<ResponseMatkul> call, Response<ResponseMatkul> response) { if (response.isSuccessful()) { loading.dismiss(); if (response.body().isError()) { tvBelumMatkul.setVisibility(View.VISIBLE); } else { final List<SemuamatkulItem> semuamatkulItems = response.body().getSemuamatkul(); rvMatkul.setAdapter(new MatkulAdapter(mContext, semuamatkulItems)); matkulAdapter.notifyDataSetChanged(); initDataIntent(semuamatkulItems); } } else { loading.dismiss(); Toast.makeText(mContext, "Gagal mengambil data mata kuliah", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<ResponseMatkul> call, Throwable t) { loading.dismiss(); Toast.makeText(mContext, "Koneksi internet bermasalah", Toast.LENGTH_SHORT).show(); } }); |
Lalu buatlah fungsi kembali bernama initDataIntent. Fungsi ini berguna untuk mengirim data matkul activity ke detail_matkul activity. Masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
rvMatkul.addOnItemTouchListener( new RecyclerItemClickListener(mContext, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { String id = matkulList.get(position).getId(); String namadosen = matkulList.get(position).getNamaDosen(); String matkul = matkulList.get(position).getMatkul(); Intent detailMatkul = new Intent(mContext, MatkulDetailActivity.class); detailMatkul.putExtra(Constant.KEY_ID_MATKUL, id); detailMatkul.putExtra(Constant.KEY_NAMA_DOSEN, namadosen); detailMatkul.putExtra(Constant.KEY_MATKUL, matkul); startActivity(detailMatkul); } })); |
Catatan :
- Jika RecyclerItemClickListener masih merah silahkan agan menuju artikel saya untuk membuat file interface recycler view tersebut. Agan bisa cek disini : Recycler View Click Listener
- Jika MatkulDetailActivity masih merah biarkan saja terlebih dahulu karena kita belum membuat activity tersebut.
- Jika TambahMatkulActivity masih merah biarkan saja terlbih dahulu karea kita belum membuat activity tersebut.
Ketigabelas,
Buatlah activity baru bernama MatkulDetailActivity lalu buka activity_matkul_detail dan isi dengan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<ImageView android:id="@+id/ivTextDrawable" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginTop="32dp" android:layout_gravity="center" /> <TextView android:id="@+id/tvNamaDosen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="8dp" tools:text="Nama Dosen"/> <TextView android:id="@+id/tvNamaMatkul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" tools:text="Nama matkul"/> <Button android:id="@+id/btnHapus" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="hapus matkul"/> |
Lalu di class MatkulDetailActivity masukan kode berikut tepat diatas onCreate :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
@BindView(R.id.ivTextDrawable) ImageView ivTextDrawable; @BindView(R.id.tvNamaDosen) TextView tvNamaDosen; @BindView(R.id.tvNamaMatkul) TextView tvNamaMatkul; @BindView(R.id.btnHapus) Button btnHapus; ProgressDialog loading; String mId; String mNamaDosen; String mNamaMatkul; Context mContext; BaseApiService mApiService; public String[] mColors = { "#39add1", // light blue "#3079ab", // dark blue "#c25975", // mauve "#e15258", // red "#f9845b", // orange "#838cc7", // lavender "#7d669e", // purple "#53bbb4", // aqua "#51b46d", // green "#e0ab18", // mustard "#637a91", // dark gray "#f092b0", // pink "#b7c0c7" // light gray }; |
Lalu didalam onCreate tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
getSupportActionBar().setTitle("Matkul Detail"); ButterKnife.bind(this); mContext = this; mApiService = UtilsApi.getAPIService(); Intent intent = getIntent(); mId = intent.getStringExtra(Constant.KEY_ID_MATKUL); mNamaDosen = intent.getStringExtra(Constant.KEY_NAMA_DOSEN); mNamaMatkul = intent.getStringExtra(Constant.KEY_MATKUL); tvNamaDosen.setText(mNamaDosen); tvNamaMatkul.setText(mNamaMatkul); String firstCharNamaMatkul = mNamaMatkul.substring(0,1); TextDrawable drawable = TextDrawable.builder() .buildRound(firstCharNamaMatkul, getColor()); ivTextDrawable.setImageDrawable(drawable); btnHapus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { requestDeleteMatkul(); } }); |
Keempatbelas,
Didalam class MatkulDetailActivity tambahkan fungsi bernama requestDeleteMatkul() lalu tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
loading = ProgressDialog.show(mContext, null, "Harap Tunggu...", true, false); mApiService.deteleMatkul(mId).enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful()){ loading.dismiss(); Toast.makeText(mContext, "Berhasil mengapus matkul", Toast.LENGTH_SHORT).show(); startActivity(new Intent(mContext, MatkulActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)); finish(); } else { loading.dismiss(); Toast.makeText(mContext, "Gagal menghapus matkul", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { loading.dismiss(); Toast.makeText(mContext, "koneksi internet bermasalah", Toast.LENGTH_SHORT).show(); } }); |
Catatan :
Jika kode didalam fungsi tersebut masih error itu dikarenakan agan belum buat interface delete didalam class baseapiservice. Silahkan agan buka terlebih dahulu class baseapiservicenya lalu tambahkan kode berikut :
1 2 |
@DELETE("matkul/{idmatkul}") Call<ResponseBody> deteleMatkul(@Path("idmatkul") String idmatkul); |
ID matkul disini didapatkan dari ketika user mengklik suatu list di activity sebelumnya.
Kelimabelas,
Buat activity baru bernama TambahMatkulActivity lalu buka activity_tambah_matkul lalu masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:text="Pilih Dosen : "/> <Spinner android:id="@+id/spinnerDosen" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp"></Spinner> </LinearLayout> <EditText android:id="@+id/etNamaMatkul" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:editable="false" android:hint="Nama Matkul"/> <Button android:id="@+id/btnSimpanMatkul" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="simpan matkul"/> |
Keenambelas,
Buka file BaseApiService lalu tambakan kode berikut :
1 2 3 4 |
@FormUrlEncoded @POST("matkul") Call<ResponseBody> simpanMatkulRequest(@Field("nama_dosen") String namadosen, @Field("matkul") String namamatkul); |
Ketujuhbelas,
Buka TambahMatkulActivity lalu tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 |
@BindView(R.id.spinnerDosen) Spinner spinnerDosen; @BindView(R.id.etNamaMatkul) EditText etNamaMatkul; @BindView(R.id.btnSimpanMatkul) Button btnSimpanMatkul; ProgressDialog loading; Context mContext; BaseApiService mApiService; |
Lalu didalam onCreate tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
ButterKnife.bind(this); mContext = this; mApiService = UtilsApi.getAPIService(); initSpinnerDosen(); spinnerDosen.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selectedName = parent.getItemAtPosition(position).toString(); requestDetailDosen(selectedName); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); btnSimpanMatkul.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { requestSimpanMatkul(); } }); |
Didalam activity tersebut tambahkan fungsi bernama initSpinnerDosen() tambahkan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
loading = ProgressDialog.show(mContext, null, "harap tunggu...", true, false); mApiService.getSemuaDosen().enqueue(new Callback<ResponseDosen>() { @Override public void onResponse(Call<ResponseDosen> call, Response<ResponseDosen> response) { if (response.isSuccessful()) { loading.dismiss(); List<SemuadosenItem> semuadosenItems = response.body().getSemuadosen(); List<String> listSpinner = new ArrayList<String>(); for (int i = 0; i < semuadosenItems.size(); i++){ listSpinner.add(semuadosenItems.get(i).getNama()); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, listSpinner); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerDosen.setAdapter(adapter); } else { loading.dismiss(); Toast.makeText(mContext, "Gagal mengambil data dosen", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<ResponseDosen> call, Throwable t) { loading.dismiss(); Toast.makeText(mContext, "Koneksi internet bermasalah", Toast.LENGTH_SHORT).show(); } }); |
Lalu tambahkan fungsi requestDetailDosen dengan parameter String namadosen dan masukan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
mApiService.getDetailDosen(namadosen).enqueue(new Callback<ResponseDosenDetail>() { @Override public void onResponse(Call<ResponseDosenDetail> call, Response<ResponseDosenDetail> response) { if (response.isSuccessful()){ if (response.body().isError()){ Toast.makeText(mContext, response.body().getMessage(), Toast.LENGTH_SHORT).show(); } else { etNamaMatkul.setText(response.body().getMatkul()); } } else { Toast.makeText(mContext, "Gagal mengambil data detail", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<ResponseDosenDetail> call, Throwable t) { Toast.makeText(mContext, "Koneksi internet bermasalah", Toast.LENGTH_SHORT).show(); } }); |
Lalu tambahkan fungsi kembali dengan nama requestSimpanMatkul. Fungsi ini berguna untuk menambahkan kedalam database. Untuk kodenya masukan dengan kode berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
loading = ProgressDialog.show(mContext, null, "Harap Tunggu...", true, false); mApiService.simpanMatkulRequest(spinnerDosen.getSelectedItem().toString(), etNamaMatkul.getText().toString()) .enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful()){ loading.dismiss(); Toast.makeText(mContext, "Berhasil menambahkan data matkul", Toast.LENGTH_SHORT).show(); startActivity(new Intent(mContext, MatkulActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)); finish(); } else { loading.dismiss(); Toast.makeText(mContext, "Gagal menambahkan data matkul", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { loading.dismiss(); Toast.makeText(mContext, "Koneksi internet bermasalah", Toast.LENGTH_SHORT).show(); } }); |
Kedelapanbelas,
Sampai sini silahkan jalankan aplikasi dan semoga lancar.
Untuk screenshot aplikasinya begini :
Download Project Tutorial CRUD Rest API Menggunakan Retrofit 2 Android ( Mahasiswa App ) :
Sampai disini agan sudah memakai Retrofit2 dengan method POST,GET, dan DELETE. Method POSTnya disini disaat kasus mahasiswa menambahkan mata kuliah, Method GET disaat ambil list-list dosen, Method DELETE pada kasus mengapus mata kuliah. Sekian artikel mengenai Tutorial CRUD Rest API Menggunakan Retrofit 2 Android. Kurang lebihnya saya mohon maaf, Ditunggu komentar mengenai artikel ini. Semoga bermanfaat.
Ini gak pake ip localhost mas? saya lihat tutorialnya gak ada
sama saja gan konsepnya. bedanya hanya di url aja disesuaikan.
Gannn…
saya baru liat sekilas dan saya mau tanya apakah ada versi video nya ? dan sekalian mau tanya jika saya curi ilmu untuk dijadikan versi youtube (vidio) boleh gak gan ?
Belum ada gan. Silahkan gan, cantumkan sumber aja jangan lupa untuk saling menghargai 🙂
Sangat membantu
Alhamdulillah, terimakasih gan.
Mantap. Bagus tutorialnya, mungkin bisa disandingkan dengan tutorial menggunakan realm. Bisa juga sama design pattern.
Terimakasih gan sarannya. Untuk kedepannya insyaAllah saya buat seperti itu gan.
gan, minta contoh php yg get matkul atau dosen tp berdasarkan id….boleh gak gan?
Bisa aja gan, tinggal edit parameternya aja kan? kurang lebih APInya bisa dicontoh dari yang get detail dosen berdasarkan nama. Untuk referensinya kesini gan : https://farizdotid.com/cara-membuat-api-crud-menggunakan-slim-framework/
gan saya mau tanya kok saya saat klik tombol lihat matkul appnya force close terus ya, padahal sudah ikutin step by step