CRUD Laravel RESTful API pada android Menggunakan retrofit part 2
Pada part pertama kita sudah men-setup projek android menggunakan retrofit2 sampai kita berhasil melakukan request seluruh data ke rest server dan menampilkan seluruh data tersebut di aplikasi android kita. Dipart 2 ini kita akan melanjutkannya dengan melakukan Create, Update dan Delete.
- Create Data
Di-part sebelumnya saya membuat bottom navigation yang dibagi menjadi 3 menu, halaman pertama yaitu dashboard digunakan untuk menampilkan seluruh data barang, dan pada halaman kedua kita sudah membuat class dengan nama AddBarangFragment yang akan saya digunakan untuk menambahkan data.
Pertama-tama kita buka file xml dari class AddBarangFragment yang bernama fragment_add_barang.xml, dihalaman ini kita akan membuat form untuk menginputkan data nama barang dan jumlah barang. Untuk kode form anda dapat meng-copy dari kode berikut :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layoutNamaBarang"
app:errorEnabled="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputNamaBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Masukkan Nama Barang"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layoutJumlahBarang"
app:errorEnabled="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="75dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputJumlahBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Masukkan Jumlah Barang"/>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/btnTambahBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tambah Barang"
android:background="@drawable/btn_btn_background"
android:textAllCaps="false"
android:textSize="20dp"
android:textColor="#fff"
android:layout_marginTop="155dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="12dp"
/>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
Hasil dari kode berikut merupakan tampilan seperti ini :
Jika urusan tampilkan kita sudah selesai, kita bisa tambahkan url pada interface kita yang bernama InterfaceConnection, untuk menambahkan data kita gunakan method “POST”, dan kita isi dengan data nama barang dan jumlah barang, kalian bisa copy code berikut :
@FormUrlEncoded
@POST("barang/tambah_barang")
Call<Data_Response> tambah_barang(
@Field("namaBarang") String namaBarang,
@Field("jmlBarang") String jmlBarang
);
Kode kode ini bisa kalian jumpai di dokumentasi milik retrofit2, untuk method post kita wajib menambahkan kode @FormUrlEncoded
Selanjutnya kita bisa Kembali ke class AddBarangFragment, mula-mula kita deklarasi dulu atribut dari layout yang kita buat kemudian instansiasi atribut dari layout tersebut. Jika sudah kita akan buat request menuju rest server dengan cara memanggil class ApiConnection yang telah berisi default url penghubung dan nantinya default url tersebut akan ditambah dengan url request yang akan kita buat pada class AddBarangFragment. Oiya sepertinya kurang jelas karena di part pertama kita hanya membahas sedikit dan lebih banyak melakukan setup retrofit, kita bahas disini kuy
Kita kan sudah punya class dengan nama ApiConnection yang berisikan kode seperti ini :
Saat kita melakukan test dengan postman, IP pada variable BASE_URL adalah 127.0.0.1:8000 sesuai dengan local server Laravel, tapi karena kita akan menghubungkan device smartphone kita dengan rest server kita butuh alamat agar koneksi ini tercapai, maka computer kitalah yang kita jadikan server sementara, makannya kita rubah IP yang sebelumnya menggunkanan IP default Laravel (127.0.0.1:8000) menjadi IP milik computer kita sehingga menjadi 192.168.2 dan url selanjutnya tetap sama, sebelumnya pastikan Kembali computer dan smartphone anda terhubung dengan jaringan yang sama,
Nah kita url kita kan http://192.168.18.2/sistem_kasir/public/api/ , lalu waktu melakukan test ada url selanjutnya bro? dimana url tersebut?
Nah url setelah api/ berada pada interface kita yang bernama InterfaceConnection tadi. Saat kita melakukan request InterfaceConnection ini berhubungan dengan class ApiConnection, sehingga saat dilakukan request URLnya akan tergabung, jika digabungkan permisalannya akan seperti ini :
Nah itu lah kenapa URLnya dipotong sampai api/, jika ingin dipotong kurang dari api/ misalkan boleh, tetapi di interfaceConnecton harus ditambahkan yang dikurangi😊
Sampai sini mungkin sudah jelas, kita akan lanjutkan ke class AddBarangFragment, kalian bisa langsung menambahkan kode dibawah ini :
public class AddBarangFragment extends Fragment {
TextInputLayout layoutNamaBarang, layoutJumlahBarang;
TextInputEditText inputNamaBarang, inputJumlahBarng;
Button btnTambahBarang;
InterfaceConnection interfaceConnection;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
layoutNamaBarang = (TextInputLayout)view.findViewById(R.id.layoutNamaBarang);
layoutJumlahBarang = (TextInputLayout)view.findViewById(R.id.layoutJumlahBarang);
inputNamaBarang = (TextInputEditText)view.findViewById(R.id.inputNamaBarang);
inputJumlahBarng = (TextInputEditText)view.findViewById(R.id.inputJumlahBarang);
btnTambahBarang = (Button)view.findViewById(R.id.btnTambahBarang);
interfaceConnection = ApiConnection.getClient().create(InterfaceConnection.class);
btnTambahBarang.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
add_Barang();
}
});
}
private void add_Barang() {
String namaBarang = inputNamaBarang.getText().toString();
String jmlBarang = inputJumlahBarng.getText().toString();
if (namaBarang.isEmpty() || namaBarang.length() == 0){
layoutNamaBarang.setError("Nama Barang Tidak Boleh Kosong");
} else if (jmlBarang.isEmpty() || jmlBarang.length() == 0){
layoutJumlahBarang.setError("Jumlah Barang Tidak Boleh Kosong");
} else if (((!namaBarang.isEmpty() && namaBarang.length() !=0) && (!jmlBarang.isEmpty() && jmlBarang.length()!=0))){
Call<Data_Response> add_barang = interfaceConnection.tambah_barang(namaBarang, jmlBarang);
add_barang.enqueue(new Callback<Data_Response>() {
@Override
public void onResponse(Call<Data_Response> call, Response<Data_Response> response) {
if (response.isSuccessful()){
Toast.makeText(getActivity(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else {
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getActivity(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onFailure(Call<Data_Response> call, Throwable t) {
Log.d("Error here", "Error here", t);
t.printStackTrace();
Log.d("Error here", "Error here2", t);
Toast.makeText(getActivity(), "Terjadi kesalahan", Toast.LENGTH_SHORT).show();
}
});
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_add_barang, container, false);
}
}
tapi perhatiannya ditujukan pada 2 hal :
a. pertama pada
method override onViewCreated bagian interfaceConnection = ApiConnection.getClient.create(InterfaceConnection.class)
b. kedua pada :
method yang bernama add_Barang yang dipanggil setelah kita membuat onClick Listener pada tombol btnTambahBarang.
Disana terdapat kode :
Call<Data_Response> add_barang = interfaceConnection.tambah_barang(namaBarang, jmlBarang)
Jadi dapat dikatakan kode dalam method add_barang tersebut melakukan koneksi terhadap Api melalui class dengan nama ApiConnection via variable interfaceConnection dengan tujuan tambah_barang(tambah_barang didapat dari InterfaceConnection pada gambar dibawah)
Dengan isi parameter namaBarang dan jumlahBarang. Selanjutnya kita coba jalankan Create Datanya :
Data pada database sebelum menambahkan data dengan nama testing rest tambah data dan jumlah barang sebanyak 20
Yee sekian buat Create Data. selanjutnya kita buat Delete Data 😊
2. Delete Data
Menu delete sudah saya buat di class AdapterDaftarBarang. ditiap adapter yang dimuat oleh recylerview, jadi kita tinggal memanfaatkan tombol hapus tersebut, karena kita sudah membawa id ditiap adapter yang dimuat oleh recycler view tersebut. Sebelumnya saya akan menambahkan tampilan berupa verifikasi saat dilakukan penghapusan data. Saya akan menggunakan MaterialAlertDialogBuilder, anda dapat menambahkan dependency pada build.gradle level module app dengan kode berikut :
implementation 'com.google.android.material:material:1.3.0-alpha02'
kemudian sinkronasi Kembali gradlenya, jika sudah selesai anda bisa merubah dan menambahkan kode berikut pada bagian onBindViewHolder, karena ditahap part1 belum ada kalau tidak salah 😊
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.kodeBarang.setText(daftarBarang.get(position).getKode_barang());
holder.namaBarang.setText(daftarBarang.get(position).getNama_barang());
holder.jumlahBarang.setText(daftarBarang.get(position).getJumlah_barang());
holder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
id = daftarBarang.get(position).getKode_barang();
popupDelete();
}
});}
Pada kode diatas ditambahkan onClickListener pada btnDelete yang mengarah pada method popupDelete() dan kita juga lakukan set pada variable global bernama id mengenai id dari posisi adapter yang kita klik. Kemudian untuk kode pop up deletenya :
private void popupDelete() {
Context context = new ContextThemeWrapper(mContext, R.style.AppTheme);
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(context);
materialAlertDialogBuilder.setTitle("Hapus Barang")
.setMessage("Apa anda yakin ingin menghapus barang ini?")
.setNegativeButton("Batalkan", null)
.setPositiveButton("Ya!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteBarang();
}
})
.show();
}
dari method pop up delete tersebut diarahkan method deleteBarang(), berikut merupakan isi dari method deleteBarang :
private void deleteBarang(){
interfaceConnection = ApiConnection.getClient().create(InterfaceConnection.class);
Call<Data_Response> hapus_data_barang = interfaceConnection.hapus_barang(id);
hapus_data_barang.enqueue(new Callback<Data_Response>() {
@Override
public void onResponse(Call<Data_Response> call, Response<Data_Response> response) {
if (response.isSuccessful()){
Toast.makeText(mContext, response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else {
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(mContext, jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onFailure(Call<Data_Response> call, Throwable t) {
}
});
}
dan langsung kita coba, dan hasilnya data yang bernama testing rest tambah data terhapus😊
selanjutnya kita akan lakukan pembuatan fungsi Update Barang 😊
3. Update Data
Kita tambahkan dulu fragment baru dengan nama UpdateDataBarangFragment dan buat layout untuk fragment tersebut, agar lebih cepat kalian bisa copy kode berikut :
Kode layout fragment_update_data_barang.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/hiddenkodeBarang"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layoutUpdateNamaBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true"
android:layout_margin="5dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/updateNamaBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama Barang"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layoutUpdateJumlahBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="75dp"
android:layout_marginLeft="5dp"
app:errorEnabled="true"
android:layout_marginRight="5dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/updateJumlahBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Masukkan Jumlah"
/>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/btnUpdateBarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Perbarui Data"
android:textColor="#fff"
android:background="@drawable/btn_btn_background"
android:textSize="20dp"
android:textAllCaps="false"
android:layout_marginTop="160dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="12dp"/>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
Dan untuk kode pada Class UpdateDataBarangFragment :
public class UpdateDataBarangFragement extends Fragment {
TextInputEditText updateNamaBarang, updateJumlahBarang;
TextInputLayout layoutUpdateNamaBarang, layoutUpdateJumlahBarang;
Button btnUpdateBarang;
String kodeBarang, namaBarang, jumlahBarang;
TextView hiddenKodeBarang;
InterfaceConnection interfaceConnection;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
interfaceConnection = ApiConnection.getClient().create(InterfaceConnection.class);
updateNamaBarang = (TextInputEditText)view.findViewById(R.id.updateNamaBarang);
updateJumlahBarang = (TextInputEditText)view.findViewById(R.id.updateJumlahBarang);
layoutUpdateNamaBarang = (TextInputLayout)view.findViewById(R.id.layoutUpdateNamaBarang);
layoutUpdateJumlahBarang = (TextInputLayout)view.findViewById(R.id.layoutUpdateJumlahBarang);
hiddenKodeBarang = (TextView)view.findViewById(R.id.hiddenkodeBarang);
btnUpdateBarang = (Button)view.findViewById(R.id.btnUpdateBarang);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_update_data_barang, container, false);
}
}
selanjutnya kita buat path url baru pada InterfaceConnection seperti berikut :
@FormUrlEncoded
@PUT("barang/update/{kode_barang}")
Call<Data_Response> update_barang(@Path("kode_barang") String id,
@Field("nama_barang") String nama_barang,
@Field("jumlah_barang") String jumlah_barang
);
Selanjutnya Kembali ke class AdapterDaftarBarang kita tambahkan fungsi onClick pada button btnEdit, hanya saja bedanya disini kita akan passing atau mengoper data ini ke fragment lain untuk ditangkap dengan menggunakan Bundle. Kalian bisa langsung copy kode berikut :
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.kodeBarang.setText(daftarBarang.get(position).getKode_barang());
holder.namaBarang.setText(daftarBarang.get(position).getNama_barang());
holder.jumlahBarang.setText(daftarBarang.get(position).getJumlah_barang());
holder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
id = daftarBarang.get(position).getKode_barang();
popupDelete();
}
});
holder.btnEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String kode = daftarBarang.get(position).getKode_barang();
String nama = daftarBarang.get(position).getNama_barang();
String jumlah = daftarBarang.get(position).getJumlah_barang();
Bundle bundle = new Bundle();
bundle.putString("kdBarang", kode);
bundle.putString("nmBarang", nama);
bundle.putString("jmlBarang", jumlah);
Fragment fragment = new UpdateDataBarangFragement();
fragment.setArguments(bundle);
FragmentManager fragmentManager = ((MainActivity)mContext).getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).commit();
}
});
}
Disana terdapat bundle.putString(‘key’, ‘data’) kemudian lakukan perpindahan fragment ke UpdateDataBarangFragment. Jika sudah kita pindah ke Class UpdateDataBarangFragment dan kita tangkap terlebih dahulu hasil passing atau oper dari Class AdapterDaftarBarang dengan cara berikut :
try {
final Bundle bundle = getArguments();
kodeBarang = bundle.getString("kdBarang");
namaBarang = bundle.getString("nmBarang");
jumlahBarang = bundle.getString("jmlBarang");
}
catch(final Exception e){
// Do nothing
}
nah pastikan parameter ‘key’ saat kita mengirim sama dengan saat kita menerima data seperti gambar dibawah.
pengirim :
Penerima :
Jika data sudah didapat set data tersebut ke form edit menggunakan kode berikut :
updateNamaBarang.setText(namaBarang);
updateJumlahBarang.setText(jumlahBarang);
dan buat method onClick pada tombol btnUpdateBarang untuk mengarah ke method updateBarang(); seperti kode berikut :
btnUpdateBarang.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updateBarang();
}
});
buat method updateBarang() dan copy-paste kode berikut :
private void updateBarang() {
String getNewNamaBarang = updateNamaBarang.getText().toString();
String getNewJumlahaBarang = updateJumlahBarang.getText().toString();
Data_Model dataModel = new Data_Model();
dataModel.setNama_barang(getNewJumlahaBarang);
dataModel.setJumlah_barang(getNewNamaBarang);
Call<Data_Response> update_data_barang = interfaceConnection.update_barang(kodeBarang, getNewNamaBarang, getNewJumlahaBarang);
Log.d("Kode Barang", kodeBarang);
Log.d("Nama Barang", kodeBarang);
Log.d("Jumlah Barang", kodeBarang);
update_data_barang.enqueue(new Callback<Data_Response>() {
@Override
public void onResponse(Call<Data_Response> call, Response<Data_Response> response) {
if (response.isSuccessful()){
Toast.makeText(getActivity(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else {
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getActivity(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onFailure(Call<Data_Response> call, Throwable t) {
Toast.makeText(getActivity(), "Terjadi kesalahan", Toast.LENGTH_SHORT).show();
}
});
}
jika kurang jelas berikut merupakan kode keseluruhan dari Class UpdateDataBarang :
public class UpdateDataBarangFragement extends Fragment {
TextInputEditText updateNamaBarang, updateJumlahBarang;
TextInputLayout layoutUpdateNamaBarang, layoutUpdateJumlahBarang;
Button btnUpdateBarang;
String kodeBarang, namaBarang, jumlahBarang;
TextView hiddenKodeBarang;
InterfaceConnection interfaceConnection;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
interfaceConnection = ApiConnection.getClient().create(InterfaceConnection.class);
updateNamaBarang = (TextInputEditText)view.findViewById(R.id.updateNamaBarang);
updateJumlahBarang = (TextInputEditText)view.findViewById(R.id.updateJumlahBarang);
layoutUpdateNamaBarang = (TextInputLayout)view.findViewById(R.id.layoutUpdateNamaBarang);
layoutUpdateJumlahBarang = (TextInputLayout)view.findViewById(R.id.layoutUpdateJumlahBarang);
hiddenKodeBarang = (TextView)view.findViewById(R.id.hiddenkodeBarang);
btnUpdateBarang = (Button)view.findViewById(R.id.btnUpdateBarang);
try {
final Bundle bundle = getArguments();
kodeBarang = bundle.getString("kdBarang");
namaBarang = bundle.getString("nmBarang");
jumlahBarang = bundle.getString("jmlBarang");
}
catch(final Exception e){
// Do nothing
}
updateNamaBarang.setText(namaBarang);
updateJumlahBarang.setText(jumlahBarang);
btnUpdateBarang.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updateBarang();
}
});
}
private void updateBarang() {
String getNewNamaBarang = updateNamaBarang.getText().toString();
String getNewJumlahaBarang = updateJumlahBarang.getText().toString();
Data_Model dataModel = new Data_Model();
dataModel.setNama_barang(getNewJumlahaBarang);
dataModel.setJumlah_barang(getNewNamaBarang);
Call<Data_Response> update_data_barang = interfaceConnection.update_barang(kodeBarang, getNewNamaBarang, getNewJumlahaBarang);
Log.d("Kode Barang", kodeBarang);
Log.d("Nama Barang", kodeBarang);
Log.d("Jumlah Barang", kodeBarang);
update_data_barang.enqueue(new Callback<Data_Response>() {
@Override
public void onResponse(Call<Data_Response> call, Response<Data_Response> response) {
if (response.isSuccessful()){
Toast.makeText(getActivity(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else {
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getActivity(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onFailure(Call<Data_Response> call, Throwable t) {
Toast.makeText(getActivity(), "Terjadi kesalahan", Toast.LENGTH_SHORT).show();
}
});
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_update_data_barang, container, false);
}
}
selanjutnya kita akan tes data bernama test yihau dengan jumlah barang 20 akan kita ubah menjadi testing rest update data dan jumlahnya menjadi 1 untuk dilakukan perubahan :
yee, CRUD Android menggunakan retrofit2 yang terhubung dengan restful api dengan framework laravel selesai. jika ada saran dan komentar bisa komen dibawah. Sekian terima kasih 😊
berikut source codenya, semoga membantu