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.

aturan_penggunaan_firebase_realtimeDatabase

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.

RealtimeDatabase1_Menggunakan_Child_Added

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:

Screenshot_OutputDataLayout

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:

Screenshot_Firebase_RTD, Example1

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.

RealtimeDatabase2_Menggunakan_Child_Added

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.

Contoh_Referensi_database_pada_firebase_realtime_database

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.

Berlangganan update artikel terbaru via email:

0 Response to "Belajar Cara Mengambil Data di Firebase Realtime Database"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel