Android Firebase Realtime Database Examples.
Firebase Realtime database is a database backend as a service Cloud hosted solution that gives us the platform to build rich apps.
Normally we are used to making HTTP requests to read or write data against our servers.But not in Firebase.It uses synchronization technology that allows it to be realtime,but still performant.
Its realtime : Therefore synchronizes data across all devices be it Mobile devices,PCs etc.Whenever there is a data change,events are fired and all connected devices get the updates.
Platfrom Independent – Being cloud hosted,any platform that can access internet can take advantage of its features.Be it from a PC,mobile device or web browser,or other servers.
Easy Access Control - Security-wise,there is Firebase Realtime database Security Rules.This is expressioned based rules that get called whenever data is to be persisted or read from our database.This ensures that clearly,you can control your data access using simple expressions,that of course get executed on the server side.
It’s a NoSQL solution and is heavily optimized for performance.
Has Offline capability : Firebase caches data on disk.These data can be accessed even when offline.Normally we are used to write so much code not only to make network operations,but also to oversee good user design guidelines that allows performant apps.The classic way is using threading classes like AsyncTask or Serives like IntentService to poll data so that our User Interface remains responsive.Because firebase persists data on the disk automatically,we don’t have to use the likes of IntentService to poll updates.
Here is the new official firebase site.
Some of the firebase features include :
Gives you insights about your users,their behaviours as well as ad performance
Helps you build better applications.
Helps in user engagement and acquisition.
(d). Monetization Helps in monetizing your app.
Firebase is realtime.Yes realtime.This means it syncs data across all connected clients or devices,irrespective of the devices themselves.Mmmh!.Be it from a web browser,mobile device,personal computer etc.
During this time the devices remain responsive because of how firebase works.Normally whenever we are doing network operations,be it polling updates from a remote serverWe do so classically by making HTTP requests,either to read or write resources.This normally requires us to do so in background threads or services,making the process tricky and with so much boilerplate.
With firebase, these gets done automatically for us. But even better, it does persist data to disk. So no need to manually write caching and data polling algorithms to maintain fresh data, while keeping our user interface responsive. This is big for real. In fact, even while offline, user can keep adding data.
These gets persisted in the disk. The app remains 100% responsive. Because Realtime events continue being raised. The network comes back. Device connects. The Firebase realtime database jumps to action. It syncs the local data with remote data. Any changes are resolved amicably.
But hey, what about security.Mmh! Security. Well Firebase comes with Firebase Realtime Database Security rules. This is a language, an expression based language. It controls your data access. When data can be read or written .It also structures your data.
Complex access levels can be realized with help of Firebase Authentication. Realtime Database API cannot solve everything. Only operations that complete quick are done using this API.
Sure,we can have talked about Firebase Realtime Database and its cool.But not all data types will be good practice to store in it.For instance binary data like images,videos,pdf files,audio etc won’t be good saving in Firebase Realtime Database.
Instead Firebase or Google if you like,provides a more suited option in Firebase Storage. Code files like Html, CSS and javascript files can be hosted with Firebase Hosting.Also assets like fonts,icons,graphics etc. Infact,there is alson Firebase Remote Config can store app configurations in key value pairs.This can be used by developers to change UI appearance without need for an update.
All the above features are independent.To create an app taking advantage of any of them,first you need to use your Google account.You sign up then move to Google Console here.
Hi guys.In this an example tutorial we cover how to configure firebase realtime database with android and write a simple example of saving data into firebase from an edittext.
What we do:
Head over to Firebase Console, create a Firebase App, Register your app id and download the google-services.json
file. Add it to your app folder.
Head over to project level(project folder) build.gradle
and
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com" // Google's Maven repository
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Add them in you app level(app folder) build.gradle, then
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.android.support:cardview-v7:23.3.0'
compile 'com.google.firebase:firebase-core:11.8.0'
compile 'com.google.firebase:firebase-database:11.8.0'
}
apply plugin: 'com.google.gms.google-services'
Make sure you apply plugin: 'com.google.gms.google-services'
as above.
This is our model class representing a single spacecraft object.
The spacecraft will name
,propellant
and description
properties.
package com.tutorials.hp.firebasestarter.m_Model;
public class Spacecraft {
String name,propellant,description;
public Spacecraft() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPropellant() {
return propellant;
}
public void setPropellant(String propellant) {
this.propellant = propellant;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Where we write to Firebase database CRUD code. In this example we are saving data to Firebase. This class will receive a DatabaseReference as a parameter when instantiate.
package com.tutorials.hp.firebasestarter.m_FireBase;
import com.google.firebase.database.DatabaseException;
import com.google.firebase.database.DatabaseReference;
import com.tutorials.hp.firebasestarter.m_Model.Spacecraft;
public class FirebaseHelper {
DatabaseReference db;
Boolean saved=null;
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
//SAVE
public Boolean save(Spacecraft spacecraft)
{
if(spacecraft==null)
{
saved=false;
}else
{
try
{
db.child("Spacecrafts").setValue(spacecraft);
saved=true;
}catch (DatabaseException e)
{
e.printStackTrace();
saved=false;
}
}
return saved;
}
}
This class is our main activity and derives from appcompatactivity.
package com.tutorials.hp.firebasestarter;
import android.app.Dialog;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.tutorials.hp.firebasestarter.m_FireBase.FirebaseHelper;
import com.tutorials.hp.firebasestarter.m_Model.Spacecraft;
public class MainActivity extends AppCompatActivity {
DatabaseReference db;
FirebaseHelper helper;
EditText nameEditTxt,propTxt,descTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//SET UP FIREBASE DB
db= FirebaseDatabase.getInstance().getReference();
helper=new FirebaseHelper(db);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
displayInputDialog();
}
});
}
//DISPLAY INPUT DIALOG
private void displayInputDialog()
{
Dialog d=new Dialog(this);
d.setTitle("Save To Firebase");
d.setContentView(R.layout.input_dialog);
nameEditTxt= (EditText) d.findViewById(R.id.nameEditText);
propTxt= (EditText) d.findViewById(R.id.propellantEditText);
descTxt= (EditText) d.findViewById(R.id.descEditText);
Button saveBtn= (Button) d.findViewById(R.id.saveBtn);
//SAVE
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//GET DATA
String name=nameEditTxt.getText().toString();
String propellant=propTxt.getText().toString();
String desc=descTxt.getText().toString();
//SET DATA
Spacecraft s=new Spacecraft();
s.setName(name);
s.setPropellant(propellant);
s.setDescription(desc);
//SAVE
if(name != null && name.length()>0)
{
if(helper.save(s))
{
nameEditTxt.setText("");
propTxt.setText("");
descTxt.setText("");
}
}else
{
Toast.makeText(MainActivity.this, "Name Must Not Be Empty", Toast.LENGTH_SHORT).show();
}
}
});
d.show();
}
}
Our main activity layout.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
tools:context="com.tutorials.hp.firebasestarter.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
This layout will get included in the activity_main.xml
.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.tutorials.hp.firebasestarter.MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
This is our input dialog. Will contain edittexts for inputing data to Firebase.
<?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">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
android:orientation="vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingTop="50dp">
<android.support.design.widget.TextInputLayout
android:id="@+id/nameLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/nameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint= "Name" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/propLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/propellantEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint= "Propellant" />
<android.support.design.widget.TextInputLayout
android:id="@+id/descLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/descEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint= "Description" />
</android.support.design.widget.TextInputLayout>
</android.support.design.widget.TextInputLayout>
<Button android:id="@+id/saveBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Save"
android:clickable="true"
android:background="@color/colorAccent"
android:layout_marginTop="40dp"
android:textColor="@android:color/white"/>
</LinearLayout>
</LinearLayout>
Resource | Link |
---|---|
GitHub Browse | Browse |
GitHub Download Link | Download |
Let's look at some examples.
In this tutorial we are concerned with GridView and Firebase Realtime Database. We see how to perform CRUD operations against Firebase Realtime Database and show data in a GridView.
This is an android Firebase Realtime Database with ListView examples. We see how to add and retrieve data and show in ListViews.
In this piece we want to look at several RecyclerView and Firebase Realtime database examples. Basically how to perform several CRUD operations like adding, retrieving and showing in recyclerview.
This is an android Firebase realtime database with Spinner tutorial.