Table of Contents
A. FIREBASE ............................................................................................................................................... 2
1. Definisi Firebase ................................................................................................................................ 2
2. Membuat Akun Firebase ................................................................................................................... 2
B. KONFIGURASI PROJECT DENGAN FIREBASE.......................................................................................... 3
1. Membuat Project Android ................................................................................................................ 3
2. Sinkron Project dengan Firebase (Firebase Asisten)......................................................................... 5
3. Konfigurasi Project/Database Firebase ........................................................................................... 10
C. INSERT/CREATE DATA KE FIREBASE .................................................................................................... 13
D. READ DATA FIREBASE.......................................................................................................................... 19
E. UPDATE DATA FIREBASE ..................................................................................................................... 25
F. DELETE DATA FIREBASE....................................................................................................................... 32
Rio Andriyat – CRUD Android dengan Database Firebase 2
A. FIREBASE
1. Definisi Firebase
Firebase adalah Cloud Service Provider dan Backend as a Service yang dimiliki oleh
Google. Firebase merupakan solusi yang ditawarkan oleh Google untuk mempermudah
dalam pengembangan aplikasi mobile maupun web.
Firebase memiliki banyak SDK yang memungkinkan untuk mengintegrasi-kan layanan
ini dengan Android, iOS, Javascript, C++ hingga Unity
Device Android minimal versi 4.0 (Ice Cream Sandwich) ke atas, dan Google
Play services versi 10.2.0 ke atas
Google Play services SDK dari Google Repository, (Sudah Terinstal)
Minimal versi Android Studio 3, untuk penggunaan Firebase Assistant
a. Sebelumnya, project android di android studio telah dibuat. Dan android studio sudah
login dengan akun google yang sudah teregistrasi di firebase.google.com.
c. Pilih Analytics untuk memulai sinkron firebase dengan android project., lalu pilih Log
an Analytics Event.
d. Pilih Connect to Firebase.
Rio Andriyat – CRUD Android dengan Database Firebase 6
Keterangan :
Create new Firebase Project Membuat Project firebase baru (Beri Nama Project)
Choose an Existing Memilih menggunakan Project Firebase yang sudah ada.
Country/Region Memilih Lokasi
f. Buatlah Project Baru dengan Nama FirebaseDosen, lalu pilih Connect to Firebase.
Rio Andriyat – CRUD Android dengan Database Firebase 7
2. Pada file Project Android, sudah terdapat file json pada project/app
Rio Andriyat – CRUD Android dengan Database Firebase 8
buildscript {
dependencies {
// Add this line
classpath 'com.google.gms:google-services:4.0.1'
}
}
dependencies {
// Add this line
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
}
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
Gambar : Manifest
6. Lakukan perubahan setting rule akses dengan mengganti nilai false menjadi true.
Setelah itu pilih publishkan.
1. Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="PENDATAAN DATA DOSEN" />
<Button
android:id="@+id/bt_createdata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="Tambah Data Dosen" />
<Button
android:id="@+id/bt_viewdata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="Lihat Data Dosen" />
</LinearLayout>
Rio Andriyat – CRUD Android dengan Database Firebase 14
2. Strings.xml
<resources>
<string name="app_name">FirebaseDosen</string>
<array name="JA">
<item>Asisten Ahli</item>
<item>Lektor 200</item>
<item>Lektor 300</item>
<item>Lektor Kepala</item>
<item>Profesor</item>
</array>
</resources>
3. MainActivity.java
package com.example.vr46.firebasedosen;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btCreateDB=(Button)findViewById(R.id.bt_createdata);
btViewDB=(Button)findViewById(R.id.bt_viewdata);
btCreateDB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Kelas yang akan dijalankan ketika tombol Create/insert di Klik
startActivity(DBCreateActivity.getActIntent(MainActivity.this));
}
});
btViewDB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Kelas untuk View Data
//startActivity(DBReadActivity.getActIntent(MainActivity.this));
}
});
}
}
Rio Andriyat – CRUD Android dengan Database Firebase 15
4. Dosen.java
Buatlah File java baru dengan nama Dosen.Java. Peran dosen.java sebagai objek yang
digunakan untuk set dan get dengan model MVC.
package com.example.vr46.firebasedosen;
import java.io.Serializable;
public Dosen()
{
}
6. Activity_dbcreate.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="TAMBAH DATA DOSEN" />
<EditText
android:id="@+id/nik"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nomor Induk Pegawai"
android:inputType="text" />
<EditText
android:id="@+id/nama_dosen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama Dosen"
android:inputType="text" />
<Spinner
android:id="@+id/spinnerJA"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/JA" />
<Button
android:id="@+id/bt_submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit" />
</LinearLayout>
Rio Andriyat – CRUD Android dengan Database Firebase 17
7. DBCreateActivity.java
package com.example.vr46.firebasedosen;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dbcreate);
return TextUtils.isEmpty(s);
}
2. AdapterDosenRecyclerView.java
package com.example.vr46.firebasedosen;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
Rio Andriyat – CRUD Android dengan Database Firebase 20
/**
* Inisiasi View
* Di tutorial ini kita hanya menggunakan data String untuk tiap item
* dan juga view nya hanyalah satu TextView
*/
TextView tvTitle;
ViewHolder(View v) {
super(v);
tvTitle = (TextView) v.findViewById(R.id.tv_namadosen);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/**
* Inisiasi ViewHolder
*/
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dosen,
parent, false);
// mengeset ukuran view, margin, padding, dan parameter layout lainnya
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
/**
* Menampilkan data pada view
*/
final String name = daftarDosen.get(position).getNik();
holder.tvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/**
* Read detail data
*/
}
});
holder.tvTitle.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
/**
* Delete dan update data
*/
return true;
}
});
holder.tvTitle.setText(name);
}
@Override
public int getItemCount() {
Rio Andriyat – CRUD Android dengan Database Firebase 21
/**
* Mengembalikan jumlah item
*/
return daftarDosen.size();
}
}
4. Activity_db_read.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
</LinearLayout>
5. DBReadActivity.java
package com.example.vr46.firebasedosen;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
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;
import java.util.ArrayList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* Mengeset layout
*/
setContentView(R.layout.activity_db_read);
/**
Rio Andriyat – CRUD Android dengan Database Firebase 22
/**
* Inisialisasi dan mengambil Firebase Database Reference
*/
database = FirebaseDatabase.getInstance().getReference();
/**
* Mengambil data dari Firebase Realtime DB
*/
database.child("dosen").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
/**
* Saat ada data baru, masukkan datanya ke ArrayList
*/
daftarDosen = new ArrayList<>();
for (DataSnapshot noteDataSnapshot : dataSnapshot.getChildren()) {
/**
* Mapping data pada DataSnapshot ke dalam object Dosen
* Dan juga menyimpan primary key pada object Dosen
* untuk keperluan Edit dan Delete data
*/
Dosen dosen = noteDataSnapshot.getValue(Dosen.class);
dosen.setKey(noteDataSnapshot.getKey());
/**
* Menambahkan object Dosen yang sudah dimapping
* ke dalam ArrayList
*/
daftarDosen.add(dosen);
}
/**
* Inisialisasi adapter dan data Dosen dalam bentuk ArrayList
* dan mengeset Adapter ke dalam RecyclerView
*/
adapter = new AdapterDosenRecyclerView(daftarDosen, DBReadActivity.this);
rvView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
/**
* Kode ini akan dipanggil ketika ada error dan
* pengambilan data gagal dan memprint error nya
* ke LogCat
*/
System.out.println(databaseError.getDetails()+"
"+databaseError.getMessage());
}
});
}
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btCreateDB=(Button)findViewById(R.id.bt_createdata);
btViewDB=(Button)findViewById(R.id.bt_viewdata);
btCreateDB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Kelas yang akan dijalankan ketika tombol Create/insert di Klik
startActivity(DBCreateActivity.getActIntent(MainActivity.this));
}
});
btViewDB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Kelas untuk View Data
startActivity(DBReadActivity.getActIntent(MainActivity.this));
}
});
}
}
7. AndroidManifest.xml
Konfigurasi Manifest sebagai berikut:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.vr46.firebasedosen">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</manifest>
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dbcreate);
//Final Update
final Dosen dosen=(Dosen)getIntent().getSerializableExtra("data");
if(dosen!=null)
{
//ini untuk update
etNik.setText(dosen.getNik());
etNama.setText(dosen.getNama());
etJa.getSelectedItem().toString();
btSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dosen.setNik(etNik.getText().toString());
dosen.setNama(etNama.getText().toString());
dosen.setJa(etJa.getSelectedItem().toString());
updateDosen(dosen);
}
});
}
else
{
//ini untuk input
Rio Andriyat – CRUD Android dengan Database Firebase 26
}
}
<Button
android:layout_margin="5dp"
android:id="@+id/bt_edit_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Edit Data"
/>
<Button
android:layout_margin="5dp"
android:id="@+id/bt_delete_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete"
/>
</LinearLayout>
package com.example.vr46.firebasedosen;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Inisiasi View
* Di tutorial ini kita hanya menggunakan data String untuk tiap item
* dan juga view nya hanyalah satu TextView
*/
TextView tvTitle;
ViewHolder(View v) {
super(v);
tvTitle = (TextView) v.findViewById(R.id.tv_namadosen);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/**
* Inisiasi ViewHolder
*/
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dosen,
parent, false);
// mengeset ukuran view, margin, padding, dan parameter layout lainnya
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
/**
* Menampilkan data pada view
*/
final String name = daftarDosen.get(position).getNik();
holder.tvTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/**
* Read detail data
*/
}
});
holder.tvTitle.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
/**
* Delete dan update data
*/
//Update
final Dialog dialog=new Dialog(context);
dialog.setContentView(R.layout.dialog_view);
dialog.setTitle("Pilih Aksi");
dialog.show();
Button editButton=(Button)dialog.findViewById(R.id.bt_edit_data);
Button delButton=(Button)dialog.findViewById(R.id.bt_delete_data);
context.startActivity(DBCreateActivity.getActIntent((Activity) context).putExtra("data",
daftarDosen.get(position)));
}
}
);
@Override
public void onClick(View view) {
/**
* Delete data
*/
}
}
);
return true;
}
});
holder.tvTitle.setText(name);
}
@Override
public int getItemCount() {
/**
* Mengembalikan jumlah item
*/
return daftarDosen.size();
}
}
Piliuh data dan klik yang lama, maka akan muncul popup update/delete Data
Pilih Update Data
Rio Andriyat – CRUD Android dengan Database Firebase 31
Rio Andriyat – CRUD Android dengan Database Firebase 32