Firebase Firestore Database

By | October 9, 2021
1,098 Views

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

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

See also  Visual Studio Emulator for Android

 

 

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

See also  Decompile file APK

 

Kita bisa berikan popmenu untuk melakukan edit/hapus document diatas, jadi ketika kamu gonta-ganti ponsel, maka aplikasi akan update dengan database cloud firebase.