Menggunakan Parcelable Untuk Pengiriman Data Antar Komponen di Android

Bagus Aji Santoso 20 Agustus 2017

Menggunakan Parcelable Untuk Pengiriman Data Antar Komponen di Android

Saat melakukan perpindahan Activity menggunakan Intent, kita sering kali akan membawa satu atau beberapa data bersamanya. Contoh kita memiliki sebuah kelas data sebagai berikut:

public class Siswa { private long id; private String nama; private String kelas; public Siswa(long id, String nama, String kelas) { this.id = id; this.nama = nama; this.kelas = kelas; } // Agar ringkas, getter dan seter tidak penulis sertakan }

Kita ingin mengirim data Siswa dari suatu Activity ke Activity yang lain menggunakan Intent, maka kurang lebih cara pengiriman data siswa bersama Intent akan terlihat sebagai berikut:

Siswa siswa = new Siswa(1, "Ani", "XII RPL 3") Intent i = new Intent(this, DetailSiswaActivity.class); i.putExtra("ID_SISWA", siswa.getId()); i.putExtra("NAMA_SISWA", siswa.getNama()); i.putExtra("KELAS_SISWA", siswa.getKelas()); startActivity(i);

Lalu di DetailSiswaActivity kita ingin menangkap ketiga data siswa di atas:

public class DetailSiswaActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // Kode bawaan Activity penulis hilangkan agar lebih ringkas // Disini kita terima extra yang dikirimkan oleh Activity pengirim Long id = getIntent().getLongExtra("ID_SISWA", 1L); String nama = getIntent().getStringExtra("NAMA_SISWA"); String kelas = getIntent().getStringExtra("KELAS_SISWA"); } }

Contoh di atas hanya menggunakan objek yang memiliki tiga data. Bagaimana jika objek yang kita kirimkan memiliki data yang cukup banyak? Mengirimkan isi data si objek satu persatu tentu akan memakan waktu dan rentan kesalahan. Dapatkah kita cukup mengirimkan si objek yang memiliki data tersebut agar mendapatkan seluruh data sekaligus?

Parcelable

Jawaban dari pertanyaan di atas adalah bisa. Android memiliki sebuah fitur yang akan membuat objek yang dibuat dari kelas data kita dapat dikirimkan bersama Intent. Agar dapat melakukan hal ini, syaratnya kita harus meng-implement interface Parcelable ke kelas data yang kita buat. Berikut ini kelas Siswa yang telah meng-implement Parcelable.

public class Siswa implements Parcelable { long id; String nama; String kelas; // Kita juga dapat membuat objek dari kelas lain yang mengimplement Parcelable juga // Getter, Setter dan Constructor tidak penulis sertakan agar ringkas. // biasanya kita akan selalu me-return nilai 0 @Override public int describeContents() { return 0; } // Perhatikan method yang dipanggil pada objek dest @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(this.id); dest.writeString(this.nama); dest.writeString(this.kelas); } public Siswa() { } // Perhatikan method yang dipanggil pada objek in protected Siswa(Parcel in) { this.id = in.readLong(); this.nama = in.readString(); this.kelas = in.readString(); } // Cukup sesuaikan nama objeknya public static final Parcelable.Creator<Siswa> CREATOR = new Parcelable.Creator<Siswa>() { @Override public Siswa createFromParcel(Parcel source) { return new Siswa(source); } @Override public Siswa[] newArray(int size) { return new Siswa[size]; } }; }

Dengan meng-implement Parcelable ke kelas data, kini kita bisa mengirimkan langsung objeknya bersama dengan Intent;

Siswa siswa = new Siswa(1, "Ani", "XII RPL 3") Intent i = new Intent(this, DetailSiswaActivity.class); i.putExtra("SISWA", siswa); startActivity(i);

Dan berikut ini cara menerima extra Parcelable yang dikirim di Activity baru:

public class DetailSiswaActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // Kode bawaan Activity penulis hilangkan agar lebih ringkas // Disini kita terima extra yang dikirimkan oleh Activity pengirim Siswa siswaDiterima = getIntent().getParcelableExta("SISWA"); } }

Berkat Parcelable kita dapat mengirimkan data antar Activity dengan lebih mudah.

Pembuatan Parcelable Otomatis

Penulis hampir tidak pernah meng-implement Parcelable dengan menuliskannya secara manual. Penulis selalu menggunakan plugin Android Studio bernama Android Parcelable code generator. Plugin ini dapat dipasang dari menu File > Settings > Plugins > Browse Repositories, masukkan namanya lalu klik Install plugin.

Image

Setelah terpasang, jangan lupa untuk me-restart Android Studio. Kode untuk Parcelable dapat dilakukan melalui klik kanan di dalam kelas data, lalu pilih Generate > Parcelable.

Image

Referensi: Codepath

Vogella