Firebase Firestore Database – adalah database dari firebase yang menggunakan konsep NoSQL, pada project android yang melibatkan media penyimpanan database maka salah satu yang biasa kita gunakan pada android yaitu Sqlite Database, namun kekurangan pada Sqlite database yaitu yang bersifat lokal yaitu hanya ada di ponsel user. Bila kita membuat aplikasi yang bisa tersinkronisasi kalian bisa menggunakan membuat API berbasis HTTP dengan codeigniter sebagai framework php. Namun solusi ini kurang begitu menarik karena kalian butuh hosting dan domain untuk membuat API tersebut!
Firebase Firestore Database
Contents
Solusi yang menarik yaitu menggunakan produk dari firebase yaitu firestore database. Yup saya telah menggunakan produk ini untuk menyimpan Note berbasis online. Sebelumnya kita telah membuat aplikasi CRUID Android sederhana menggunakan database Sqlite. Maka kali ini kita akan mencoba meng cloud kan note tersebut agar mudah tersinkronisasi.
Install Firebase pada Project Android
Bagi kalian pengguna android studio, maka untuk install firebase pada project android sangatlah mudah! Pastikan kalian sudah punya account gmail dan sudah login di firefox.
Maka akan tampil firebase assistant
Ikuti saja langkah-langkah sesuai wizard
Jangan lupa untuk ke firefox dan membuat project di firebase – lebih lanjut kalian bisa baca disini.
Tambah Data pada firebase firestore database
Untuk menambahkan record/document pada firebase firestore database cukup mudah, buat terlebih dahulu Activity, dan tambahkan kode instance berikut
FirebaseFirestore db = FirebaseFirestore.getInstance();
Misalkan kita akan menggunakan list seperti berikut
Date currentTime = Calendar.getInstance().getTime(); Map<String, Object> note = new HashMap<>(); note.put("title", "judul note"); note.put("content", "isi content"); note.put("tanggal",currentTime.toString());
Kita akan membuat collection note
// Add a new document with a generated ID db.collection("note") .add(note) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Ketika dijalankan akan terdapat informasi sebagai berikut
D/MainActivity3: DocumentSnapshot added with ID: McvYYWebci2FdXmAc65F
Kita bisa cek firebase nya sudah masuk ID McvYYWebci2FdXmAc65F
Membaca Data pada firebase firestore database
untuk akses kembali, kita bisa gunakan perintah berikut
db.collection("note") .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { Log.d(TAG, document.getId() + " => " + document.getData()); } } else { Log.w(TAG, "Error getting documents.", task.getException()); } } });
hasilnya
D/MainActivity3: McvYYWebci2FdXmAc65F => {tanggal=Sat Oct 09 23:19:57 GMT+07:00 2021, title=judul note, content=isi content}
atau bila ingin urut berdasarkan tanggal, bisa tambahkan query berikut
db.collection("note").orderBy("tanggal", Query.Direction.DESCENDING)
Kalian bisa pelajari perintah query seperti pada NoSQL, disini.
Menampilkan Firestore pada ListView
Tentu kita ingin menampilkan isi firestore dalam tampilan menarik seperti pada aplikasi CRUD Android.
Tentu sangat mudah, kita butuh Adapter serta membuat Layout XML untuk menampung hasilnya, merujuk pada referensi disini. Kita akan membuat tampilannya. Kita buat class entitas/pojo dengan nama Note.java yang isinya setter dan getter saja.
public class Note { private String id; private String title; private String content; private String date; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } }
Selain itu kita butuh layout XML untuk menampung hasil diatas, kita beri nama note.xml isinya sebagai berikut
<?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="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/listid" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="id" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/listdate" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="tanggal"/> <TextView android:id="@+id/listtitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="title" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/listcontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="content"/> </LinearLayout>
Selain itu kita butuh class Array Adapter, kita beri nama NoteAdapter.java
public class NoteAdapter extends ArrayAdapter <Note> { public NoteAdapter(@NonNull Context context, List<Note> object) { super(context, 0, object); } @Override public View getView(int position, View convertView, ViewGroup parent){ if(convertView == null){ convertView = ((Activity)getContext()).getLayoutInflater().inflate(R.layout.note,parent,false); } TextView id = (TextView) convertView.findViewById(R.id.listid); TextView title = (TextView) convertView.findViewById(R.id.listtitle); TextView content = (TextView) convertView.findViewById(R.id.listcontent); TextView date = (TextView) convertView.findViewById(R.id.listdate); Note note = getItem(position); id.setText(note.getId()); title.setText(note.getTitle()); content.setText(note.getContent()); date.setText(note.getDate()); return convertView; } }
Untuk menampilkan semuanya, kita butuh Activity, saya buat dengan nama MainActivity2.java dengan layout nya, perhatikan variabel yang saya gunakan
public class MainActivity2 extends AppCompatActivity { private static final String TAG = "MainActivity2"; private final String COLLECTION_KEY = "note"; private FirebaseFirestore db; ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); db = FirebaseFirestore.getInstance(); listView = (ListView) findViewById(R.id.listnote); db.collection(COLLECTION_KEY).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { List<Note> list_note = new ArrayList<>(); if(task.isSuccessful()){ for(QueryDocumentSnapshot document : task.getResult()) { Note note = document.toObject(Note.class); note.setId(document.getId()); //untuk mendapatkan ID tiap record list_note.add(note); } NoteAdapter noteAdapter = new NoteAdapter(MainActivity2.this, list_note); listView.setAdapter(noteAdapter); } else { Log.d(TAG, "Error getting documents: ", task.getException()); } } }); } }
Layoutnya activity_main2.xml yaitu
<?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" tools:context=".MainActivity2"> <ListView android:id="@+id/listnote" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
Bila dijalankan maka Firestore pada ListView sebagai berikut
Kita bisa berikan popmenu untuk melakukan edit/hapus document diatas, jadi ketika kamu gonta-ganti ponsel, maka aplikasi akan update dengan database cloud firebase.