CRUD Firebase Realtime Database (5): Membuat Fungsi Update Data


Assalamualaikum Warahmatullahi Wabawarakatuh.

Hallo sobat developer, kembali lagi dengan saya, sebelumnya kita sudah belajar mengenai cara penerapan fungsi Read untuk membaca data dan menampilkannya pada RecyclerView, selanjutnya kita akan menembahkan fungsi update untuk mengubah data yang sudah dimasukan, dan mengubahnya menjadi data yang baru.


Disini saya akan menjelsakan sedikit cara kerja proses update tersebut, pertama kita menentukan item/data mana yang akan dipilih berdasarkan posisi tertentu dari ReyclerView, setiap data didalam list tersebut mempunyai kode uniknya masing-masing, kode unik inilah yang digunakan untuk mengambil data yang akan di update oleh user, lalu menyimpannya kembali kedalam database.

CRUD Firebase Realtime Database (5): Membuat Fungsi Update Data

1) Pertama kita akan membuat class dan activity baru, bernama "updateData" activity ini digunakan untuk memproses data yang ingin kita ubah.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    android:orientation="vertical"
    tools:context="com.wildan.firebasecrud.ui.updateData">

    <EditText
        android:id="@+id/new_nim"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="NIM Baru"
        android:inputType="textPersonName" />

    <EditText
        android:id="@+id/new_nama"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Nama Baru"
        android:inputType="textPersonName" />

    <EditText
        android:id="@+id/new_jurusan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Jurusan Baru"
        android:inputType="textPersonName" />

    <Button
        android:id="@+id/update"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Update" />

</LinearLayout>
View:


2) Setelah kita membuat activity tersebut, selanjutnya kita beralih pada class RacyclerViewAdapter, didalam method onLongClickListener(), kita tambahkan baris kode berikut ini.
//Menampilkan Menu Update dan Delete saat user melakukan long klik pada salah satu item
holder.ListItem.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(final View view) {
        final String[] action = {"Update", "Delete"};
        AlertDialog.Builder alert = new AlertDialog.Builder(view.getContext());
        alert.setItems(action,  new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                switch (i){
                    case 0:
                        /*
                          Berpindah Activity pada halaman layout updateData
                          dan mengambil data pada listMahasiswa, berdasarkan posisinya
                          untuk dikirim pada activity selanjutnya
                        */
                        Bundle bundle = new Bundle();
                        bundle.putString("dataNIM", listMahasiswa.get(position).getNim());
                        bundle.putString("dataNama", listMahasiswa.get(position).getNama());
                        bundle.putString("dataJurusan", listMahasiswa.get(position).getJurusan());
                        bundle.putString("getPrimaryKey", listMahasiswa.get(position).getKey());
                        Intent intent = new Intent(view.getContext(), updateData.class);
                        intent.putExtras(bundle);
                        context.startActivity(intent);
                        break;
                    case 1:
                        //Pembahasan selanjutnya mengenai fungsi Delete
                        break;
                }
            }
        });
        alert.create();
        alert.show();
        return true;
    }
});
Saat user menekan salah satu item dari list, maka akan muncul menu Update dan Delete, untuk menu delete akan dibahas pada tutorial berikutnya. Saat user memilih menu Update, maka disana kita menggunakan Class Bundle untuk mengambil dan meyimpan data dari mahasiswa yang kita pilih.

Data yang disimpan pada Bundle berupa NIM, Nama, Jurusan dan Key (kode unik yang dihasilkan Push), key ini digunakan untuk menentukan data mana yang akan diubah didalam database, karena setiap data yang tampil didalam ReyclerView, mempunyai PrimaryKeynya masing-masing, yang dihasilkan oleh push() pada saat user mengCreate data.

3) Buka class updateData.java, disini kita akan menambahkan source code untuk memproses update, berdasarkan data yang telah ditentukan.
package com.wildan.firebasecrud.ui;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.wildan.firebasecrud.R;
import com.wildan.firebasecrud.models.data_mahasiswa;

public class updateData extends AppCompatActivity {

    //Deklarasi Variable
    private EditText nimBaru, namaBaru, jurusanBaru;
    private Button update;
    private DatabaseReference database;
    private FirebaseAuth auth;
    private String cekNIM, cekNama, cekJurusan;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_data);
        getSupportActionBar().setTitle("Update Data");
        nimBaru = findViewById(R.id.new_nim);
        namaBaru = findViewById(R.id.new_nama);
        jurusanBaru = findViewById(R.id.new_jurusan);
        update = findViewById(R.id.update);

        //Mendapatkan Instance autentikasi dan Referensi dari Database
        auth = FirebaseAuth.getInstance();
        database = FirebaseDatabase.getInstance().getReference();
        getData();
        update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Mendapatkan Data Mahasiswa yang akan dicek
                cekNIM = nimBaru.getText().toString();
                cekNama = namaBaru.getText().toString();
                cekJurusan = jurusanBaru.getText().toString();

                //Mengecek agar tidak ada data yang kosong, saat proses update
                if(isEmpty(cekNIM) || isEmpty(cekNama) || isEmpty(cekJurusan)){
                    Toast.makeText(updateData.this, "Data tidak boleh ada yang kosong", Toast.LENGTH_SHORT).show();
                }else {
                    /*
                      Menjalankan proses update data.
                      Method Setter digunakan untuk mendapakan data baru yang diinputkan User.
                    */
                    data_mahasiswa setMahasiswa = new data_mahasiswa();
                    setMahasiswa.setNim(nimBaru.getText().toString());
                    setMahasiswa.setNama(namaBaru.getText().toString());
                    setMahasiswa.setJurusan(jurusanBaru.getText().toString());
                    updateMahasiswa(setMahasiswa);
                }
            }
        });
    }

    // Mengecek apakah ada data yang kosong, sebelum diupdate
    private boolean isEmpty(String s){
        return TextUtils.isEmpty(s);
    }

    //Menampilkan data yang akan di update
    private void getData(){
        //Menampilkan data dari item yang dipilih sebelumnya
        final String getNIM = getIntent().getExtras().getString("dataNIM");
        final String getNama = getIntent().getExtras().getString("dataNama");
        final String getJurusan = getIntent().getExtras().getString("dataJurusan");
        nimBaru.setText(getNIM);
        namaBaru.setText(getNama);
        jurusanBaru.setText(getJurusan);
    }

    //Proses Update data yang sudah ditentukan
    private void updateMahasiswa(data_mahasiswa mahasiswa){
        String userID = auth.getUid();
        String getKey = getIntent().getExtras().getString("getPrimaryKey");
        database.child("Admin") 
                .child(userID)
                .child("Mahasiswa")
                .child(getKey)
                .setValue(mahasiswa)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        nimBaru.setText("");
                        namaBaru.setText("");
                        jurusanBaru.setText("");
                        Toast.makeText(updateData.this, "Data Berhasil diubah", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                });
    }
}
Untuk penjelasan singkatnya, bisa kalian baca pada komentar diatas, mengenai update data, coba kalian perhatikan method updateMahasiswa(), dialam method tersebut, pertama kita mengambil UserID, yang didapat dari akun pengguna, dan PrimaryKey, yaitu kode unik yang dihasilkan push() pada saat mengCreate data.

Didalam database, pertama kita masuk kedalam lokasi Admin, lalu masuk pada lokasi userID dari pengguna, setelah itu lokasi dari chid mahasiswa, didalamnya terdapat kumpulan data mahasiswa yang sudah dimasukan oleh user, untuk menetukan data mana yang akan dipilih, kita menggunakan PrimaryKey. Dan yang terakhir kita memasukan data mahasiswa baru.

Demo:



Terimakasih atas kunjungannya, semoga tutorial yang saya berikan bisa bermanfaat. Terakhir kita akan membuat fungsi Delete data pada Aplikasi CRUD Firebase tersebut.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.