Belajar Cara Mengambil Data di Firebase Realtime Database


Assalamualaikum Warahmatullahi Wabarakatuh.

Sebelumnya kita sudah belajar, Bagaimana cara menambahkan data pada Firebase Realtime Database. Selanjutnya kita akan belajar dasar-dasar cara pengambilan data dari database, data yang akan kita ambil yaitu data yang terdapat pada project sebelumnya yang sudah kita buat. Materi ini hanya akan terfokus mengenai pengambilan data di firebase. Jadi saya sarankan kalian sudah mengikuti tahap pembuatan projectnya pada tutorial sebelumnya.


Project aplikasi yang akan kita buat yaitu aplikasi Data Mahasiswa, pada tutorial ini kita akan mencoba bagaimana menampilkan data tersebut yang diambil dari Database kedalam aplikasi Android. Didalam Firebase Realtime Database tersapat beberapa jenis peristiwa pengambilan data, seperti Child Added dan Value.

Materi lainnya yang direkomendasikan:
Secara default, peristiwa Baca dan Tulis didalam Firebase Realtime Database dibatasi, dan hanya pengguna yang terautentikasi saja yang boleh menggunakannya, Seperti pada gambar berikut ini.


Yang artinya pengguna yang terautentikasi saya yang beloh menbaca dan menulis didalam Database tersebut

A. Peristiwa Child Added

Child Added digunakan untuk mengambil daftar item dari Database, fungsi ini tidak menampilkan seluruh konten didalam lokasi yang telah ditentukan, Child Added pada umumnya digunakan untuk mengambil salah satu konten saja, terpicu 1 kali setiap ada turunannya, artinya jika kita membuat turunan baru, maka datanya akan terpicu pada turunan tersebut.

Misalnya kita sudah menyimpan data dan mempunyai Referensi Database seperti berikut ini.


Data tersebut disimpan tanpa mengguakan kode unik yang dihasilkan dari fungsi push().
Selanjutnya buat Activity baru bernama "MyListData", activity tersebut digunakan untuk mengambil dan menampilkan data yang terdapat pada database kita, kedalam TextView.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
 android:layout_margin="16dp"
 android:gravity="center"
 android:orientation="vertical"
 tools:context="cianjur.developer.net.firebaseexample.MyListData">

 <TextView
 android:id="@+id/getnim"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginTop="8dp"
 android:text="NIM :"
 android:textColor="#000000"
 android:textSize="15sp" />

 <TextView
 android:id="@+id/getnama"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginTop="8dp"
 android:text="Nama :"
 android:textColor="#000000"
 android:textSize="15sp" />

 <TextView
 android:id="@+id/getjurusan"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginTop="8dp"
 android:text="Jurusan :"
 android:textColor="#000000"
 android:textSize="15sp" />
</LinearLayout>
View:


Buka file MyListData.java, Masukan source code berikut ini.
package cianjur.developer.net.firebaseexample;

import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MyListData extends AppCompatActivity {

 //Deklarasi Variable
 private TextView GetNIM, GetNama, GetJurusan;
 private FirebaseAuth auth;
 private FirebaseDatabase getDatabase;
 private DatabaseReference getRefenence;
 private String GetUserID;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_my_list_data);
 getSupportActionBar().setTitle("Data Mahasiswa");
 GetNIM = findViewById(R.id.getnim);
 GetNama = findViewById(R.id.getnama);
 GetJurusan = findViewById(R.id.getjurusan);
 auth = FirebaseAuth.getInstance();

 //Mendapatkan User ID dari akun yang terautentikasi
 FirebaseUser user = auth.getCurrentUser();
 GetUserID = user.getUid();

 getDatabase = FirebaseDatabase.getInstance();
 getRefenence = getDatabase.getReference();

  /*
 * Mendapatkan referensi dari lokasi Admin dan tutunannya yaitu User ID dari masing-masing
 * akun user dan menambahkan ChildListener untuk menangani kejadian saat data ditambahkan,
 * diubah, dihapus dan dialihkan.
 */
 getRefenence.child("Admin").child(GetUserID).addChildEventListener(new ChildEventListener() {
 @SuppressLint("SetTextI18n")
 @Override
 public void onChildAdded(DataSnapshot dataSnapshot, String s) {
  //Mengambil daftar item dari database, setiap kali ada turunannya
  data_mahasiswa mahasiswa = dataSnapshot.getValue(data_mahasiswa.class);
  GetNIM.setText("NIM : "+mahasiswa.getNim());
  GetNama.setText("Nama : "+mahasiswa.getNama());
  GetJurusan.setText("Jurusan : "+mahasiswa.getJurusan());
 }

 @Override
 public void onChildChanged(DataSnapshot dataSnapshot, String s) {
  //......
        }
 
 @Override
 public void onChildRemoved(DataSnapshot dataSnapshot) {
  //......
 }

 @Override
 public void onChildMoved(DataSnapshot dataSnapshot, String s) {
  //.....
 }

 @Override
 public void onCancelled(DatabaseError databaseError) {
 //Digunakan untuk menangani kejadian Error
 Log.e("MyListData", "Error: ", databaseError.toException());
   }
  });
 }
}
Demo:


Penjelasan:

Pertama kita menginisialisasi FirebaseAuth yang sudah terautentikasi (Untuk Mendapatkan User ID), selanjutnya Inisialisai FirebaseDatabase dan DatabaseReference untuk mendapatkan referensi dari database kita.

Karena kita ingin mengambil data dari Mahasiswa, maka lokasi turunannya yaitu Admin > User ID. sudah saya jelaskan sebelumnya, Child Added akan terpicu satu kali setiap ada turunan yang ada, jadi jika kita menambahkan turunan lagi dibawah User ID, misalnya Mahasiswi, seperti pada gambar berikut ini.


Jadi yang akan diambil dan ditampilkan yaitu data properti dari Mahasiswi, jika kita menambahkan turunan lagi, maka data dari turunan tersebut yang akan ditampilkan.

B. Value

Adalah jenis peristiwa yang membaca snapshot statis dari database yang telah ditentukan, berbeda dengan Child Added, yang menampilkan item dan terpicu 1 kali saat ada child baru yang diturunkan, value akan terpicu saat data berada di lokasi awal, dan akan terpicu lagi saat data berubah. Data yang dimaksudkan yaitu data yang berada didalam Childnya

Misalnya kita mempunyai referensi database seperti berikut ini.


Disini kita dapat menentukan child atau turunan mana yang ingin kita ambil datanya, Mahasiswa atau Mahasiswi, pada contoh program berikut ini, misalnya kita ingin mengambil item atau data dari child Mahasiswa.

Buka file MyListData.java, untuk contoh source codenya seperti berikut ini.
package cianjur.developer.net.firebaseexample;

import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MyListData extends AppCompatActivity {

 //Deklarasi Variable
 private TextView GetNIM, GetNama, GetJurusan;
 private FirebaseAuth auth;
 private FirebaseDatabase getDatabase;
 private DatabaseReference getRefenence;
 private String GetUserID;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_my_list_data);
 getSupportActionBar().setTitle("Data Mahasiswa");
 GetNIM = findViewById(R.id.getnim);
 GetNama = findViewById(R.id.getnama);
 GetJurusan = findViewById(R.id.getjurusan);
 auth = FirebaseAuth.getInstance();

 //Mendapatkan User ID dari akun yang terautentikasi
 FirebaseUser user = auth.getCurrentUser();
 GetUserID = user.getUid();

 getDatabase = FirebaseDatabase.getInstance();
 getRefenence = getDatabase.getReference();

 /*
 * Mendapatkan referensi dari lokasi Admin dan tutunannya yaitu User ID dari masing-masing
 * akun user dan tutunannya lagi yaitu Mahasiswa, lalu menambahkan ValueEventListener 
 * untuk menangani kejadian saat data diambil dari Snapshot.
 */
 getRefenence.child("Admin").child(GetUserID).child("Mahasiswa").addValueEventListener(new ValueEventListener() {
 @SuppressLint("SetTextI18n")
 @Override
 public void onDataChange(DataSnapshot dataSnapshot) {
 //Mengambil value dari salah satu child, dan akan memicu data baru setiap kali diubah
  data_mahasiswa mahasiswa = dataSnapshot.getValue(data_mahasiswa.class);
  GetNIM.setText("NIM : "+mahasiswa.getNim());
  GetNama.setText("Nama : "+mahasiswa.getNama());
  GetJurusan.setText("Jurusan : "+mahasiswa.getJurusan());
 }

 @Override
 public void onCancelled(DatabaseError databaseError) {
  //Digunakan untuk menangani kejadian Error
  Log.e("MyListData", "Error: ", databaseError.toException());
   }
  });
 }
}
Jadi kesimpulannya yang membedakan Child Added dan Value yaitu, Child Added akan memicu data 1 kali setiap ada turunan atau child baru. sedangkan Value, akan memicu data didalam child, 1 kali setiap ada data baru.

Untuk dokumentasi lengkapnya, kalian bisa lihat disini.

Jika kalian sudah memahami dasar-dasar penggunaan Realtime Database seperti yang saya jelaskan sebelumnya. Berikutnya kita akan belajar mengenai Cara pembuatan aplikasi CRUD (Create. Read. Update dan Delete) dengan menggunakan Firebase Realtime Database.

Terimakasih atas kunjungannya, semoga tutorial yang saya berikan bisa bermanfaat untuk kalian semua, selebihnya, mohon maaf bila ada kesalahan.

Wassalamualaikum Warahmatullahi Wabarakatuh.

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