Anda di halaman 1dari 10

LAPORAN PRAKTIKUM MOBILE PROGRAMMING

“PENYIMPANAN DATA EKSTERNAL FIREBASE”

D
I
S
U
S
U
N
OLEH:
NAMA : JUSNAWIAH
NIM : 42621012
KELAS : 2A TEKNIK MULTIMEDIA DAN JARINGAN

JURUSAN TEKNIK ELEKTRO


PROGRAM STUDI TEKNIK MULTIMEDIA DAN JARINGAN
POLITEKNIK NEGERI UJUNG PANDANG
A. TUJUAN
Setelah membaca pokok bahasan ini, mahasiswa diharapkan mampu:
1. Memahami tentang penyimpanan data eksternal Firebase Cloud
2. Mempraktekkan pembuatan program dengan Firebase Cloud

B. DASAR TEORI
Firebase merupakan penyimpanan data di luar Android yang dapat digunakan untuk
penyimpanan dan berbagai data. Penyimpanan dan sinkronisasi data dengan Firebase
Cloud Database dapat diakses melalui https://firebase.google.com. Data akan
disinkronisasi di semua client, dan akan tetap tersedia saat aplikasi offline. Firebase dapat
dikoneksikan dengan aplikasi untuk berbagi data dan dapat menyimpandata pada cloud.
Data pada Firebase disimpan dalam bentuk JSON.Kelebihan menggunakan Firebase
salah satunya adalah data akandisinkronisasi secara realtime setiap client terkoneksi.
Kali ini kita akan mencoba untuk membuat sebuah project aplikasi
android sederhana untuk operasi CRUD (Create, Read, Update,
Delete) dengan menggunakan database NoSQL Firebase. Mengapa
Firebase? Karena Firebase dapat membantu kita untuk membangun
aplikasi mobile secara cepat, tanpa perlu melakukan pengaturan
infrastruktur server.
Firebase juga mendukung pengembangan aplikasi iOS, android, web, Unity, dan C++.
Salah satu fitur yang dapat kitamanfaatkan adalah Realtime Database. Firebase Realtime
Database dapat kita gunakan untuk penyimpanan dan sinkronisasi data aplikasi dalam
satuan milidetik. Pembuatan autentikasi pengguna juga cukup sederhana dan aman.
Untuk dapat menggunakan layanan Realtime Database maka dapat login menggunakan
akun gmail ke http://console.firebase.google.com, selanjutnya klik pada Add Project.

C. PERCOBAAN
 Activity_main.xml
<?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:orientation="vertical"
tools:context="ermaweb.com.example.myapplication.MainActivity">

<EditText
android:id="@+id/editAgenda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Tulis agenda disini" />

<Button
android:id="@+id/buttonAgenda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="simpanAgenda"
android:text="Simpan" />

<ListView
android:id="@+id/listAgenda"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

 Agenda_list.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:orientation="vertical">
<TextView
android:id="@+id/teksItem"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

 Agenda_update.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:orientation="vertical">

<EditText
android:id="@+id/editAgenda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Edit agenda disini" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

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

<Button
android:id="@+id/buttonDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete" />

</LinearLayout>
</LinearLayout>
 MainActivity.java
package ermaweb.com.example.myapplication;

import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

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;
import java.util.List;

public class MainActivity extends AppCompatActivity {


private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mFirebaseReference;
public static final String AGENDA_ID = "ermaweb.com.example.myapplication";
public static final String AGENDA_ITEM = "ermaweb.com.example.myapplication";
EditText editAgenda;
Button buttonSimpan;
ListView listAgenda;
List<Agenda> agendas;

@Override
protected void onCreate(Bundle savedInstanceState) {
mFirebaseDatabase = FirebaseDatabase.getInstance();
mFirebaseReference = mFirebaseDatabase.getReference("agendas");

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

editAgenda = findViewById(R.id.editAgenda);
buttonSimpan = findViewById(R.id.buttonAgenda);
listAgenda = findViewById(R.id.listAgenda);
agendas = new ArrayList<>();

mFirebaseDatabase = FirebaseDatabase.getInstance();
mFirebaseReference = mFirebaseDatabase.getReference("agendas");

listAgenda.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Agenda agenda = agendas.get(position);
Intent intent = new Intent(getApplicationContext(), Agenda.class);
intent.putExtra(AGENDA_ID, agenda.getId());
intent.putExtra(AGENDA_ITEM, agenda.getItem());
startActivity(intent);
}
});

listAgenda.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long
id) {
Agenda agenda = agendas.get(position);
showUpdateDeleteDialog(agenda.getId(), agenda.getItem());
return true;
}
});

buttonSimpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
simpanAgenda();
}
});
}

public void simpanAgenda() {


String item = editAgenda.getText().toString();
if (!TextUtils.isEmpty(item)) {
String id = mFirebaseReference.push().getKey();
Agenda agenda = new Agenda(id, item);
mFirebaseReference.child(id).setValue(agenda);
Toast.makeText(this, "Agenda ditambahkan", Toast.LENGTH_LONG).show();
editAgenda.setText("");
} else {
Toast.makeText(this, "Masukkan isi agenda", Toast.LENGTH_SHORT).show();
}
}

@Override
protected void onStart() {
super.onStart();

// Membuat listener baru


ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
agendas.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Agenda agenda = postSnapshot.getValue(Agenda.class);
agendas.add(agenda);
}
AgendaList agendaAdapter = new AgendaList(MainActivity.this, agendas);
listAgenda.setAdapter(agendaAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(MainActivity.this, "Gagal memuat agenda",
Toast.LENGTH_SHORT).show();
}
};

// Set listener pada AgendaList


AgendaList agendaAdapter = new AgendaList(MainActivity.this, agendas);
agendaAdapter.setValueEventListener(valueEventListener);
listAgenda.setAdapter(agendaAdapter);

// Tambahkan listener ke DatabaseReference


mFirebaseReference.addValueEventListener(valueEventListener);
}

@Override
protected void onStop() {
super.onStop();

// Hapus listener dari AgendaList dan DatabaseReference


AgendaList agendaAdapter = (AgendaList) listAgenda.getAdapter();
if (agendaAdapter != null) {
agendaAdapter.removeValueEventListener();
}
mFirebaseReference.removeEventListener(agendaAdapter.getValueEventListener());
}

private void showUpdateDeleteDialog(final String id, String item) {


AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.agenda_update, null);
dialogBuilder.setView(dialogView);

final EditText editText = dialogView.findViewById(R.id.editAgenda);


final Button buttonUpdate = dialogView.findViewById(R.id.buttonUpdate);
final Button buttonDelete = dialogView.findViewById(R.id.buttonDelete);

editText.setText(item);

dialogBuilder.setTitle("Update Agenda");
final AlertDialog b = dialogBuilder.create();
b.show();

buttonUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String updatedItem = editText.getText().toString().trim();
if (!TextUtils.isEmpty(updatedItem)) {
updateAgenda(id, updatedItem);
b.dismiss();
} else {
Toast.makeText(MainActivity.this, "Masukkan isi agenda",
Toast.LENGTH_SHORT).show();
}
}
});

buttonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteAgenda(id);
b.dismiss();
}
});
}

private void updateAgenda(String id, String item) {


mFirebaseReference.child(id).child("item").setValue(item);
Toast.makeText(this, "Agenda terupdate", Toast.LENGTH_SHORT).show();
}

private void deleteAgenda(String id) {


mFirebaseReference.child(id).removeValue();
Toast.makeText(this, "Agenda telah dihapus", Toast.LENGTH_SHORT).show();
}

public void simpanAgenda(View view) {


}
}

 Build gradle build


plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}

android {
namespace 'ermaweb.com.example.myapplication'
compileSdk 33

defaultConfig {
applicationId "ermaweb.com.example.myapplication"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-
rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
implementation 'com.google.firebase:firebase-database:18.0.2'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.google.firebase:firebase-database:20.2.2'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation platform('com.google.firebase:firebase-bom:32.1.1')
implementation 'com.google.firebase:firebase-analytics-ktx'
}
apply plugin: 'com.google.gms.google-services'

 Build gradle project


buildscript {
repositories {
// Pastikan Anda memiliki dua repository berikut
google() // Google's Maven repository
mavenCentral() // Maven Central repository
}
dependencies {
// Tambahkan dependensi untuk plugin Gradle layanan Google
classpath 'com.google.gms:google-services:4.3.2'
}
}

plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
}

 AgendaList.java
package ermaweb.com.example.myapplication;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.List;

public class AgendaList extends ArrayAdapter<Agenda> {


private Activity context;
List<Agenda> agendas;
private DatabaseReference databaseRef;
private ValueEventListener valueEventListener;

public AgendaList(Activity context, List<Agenda> agendas) {


super(context, R.layout.agenda_list, agendas);
this.context = context;
this.agendas = agendas;
databaseRef = FirebaseDatabase.getInstance().getReference("agendas");
valueEventListener = null;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View listAgenda = inflater.inflate(R.layout.agenda_list, null, true);
TextView isiAgenda = listAgenda.findViewById(R.id.teksItem);
Agenda agenda = agendas.get(position);
isiAgenda.setText(agenda.getItem());
return listAgenda;
}

public void setValueEventListener(ValueEventListener listener) {


this.valueEventListener = listener;
}

public void removeValueEventListener() {


if (valueEventListener != null) {
databaseRef.removeEventListener(valueEventListener);
}
}

public ValueEventListener getValueEventListener() {


return null;
}

 Agenda.java
package ermaweb.com.example.myapplication;
public class Agenda {
public String id, item;
public Agenda(){
}
public Agenda(String id, String item){
this.id = id;
this.item = item;
}
public String getId(){
return id;
}
public String getItem(){
return item;
}
}
 Hasil

D. KESIMPULAN

Anda mungkin juga menyukai