Komunikasi dan Pertukaran Data antar Intent

By | August 30, 2021
83 Views

— Belajar Android – Intent yang biasa kita gunakan adakalnya perlu saling berkomunikasi atau menyisipkan data dari intent pertama ke intent kedua. Mekanisme Komunikasi dan Pertukaran Data antar Intent tersebut bisa menggunakan 2 cara yaitu Bundle() dan Parcelable(). Kita sebelumnya sering koq menggunakan Bundle() untuk menyisipkan sebuah flag kepada inten sebelum di panggil.

Bundle

Pada tutorial akses kamera, kita menggunakan Intent Implicit untuk memanggil akses kamera

IMAGE_URI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, IMAGE_URI);
startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);

perintah

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, IMAGE_URI);

merupakan bundle yang dikirim langsung atau pada turorial CRUD Android, ketika memanggil activity edit_tambah

Intent intent = new Intent(TampilData.this,EditTambahNote.class);
Bundle bundle = new Bundle();
bundle.putInt(Setting.STATUS,Setting.TAMBAH_DATA_BARU); //kasih flag 
intent.putExtras(bundle);                       //bahwa Inten yang dibuat untuk
startActivity(intent);                          //TAMBAH DATA BARU

mendapatkan intent dengan memanggil berikut

Bundle bundel  = getIntent().getExtras();
STATUS = bundel.getInt(Setting.STATUS);

Namun ketika data yang dikirim sangat banyak yaitu berupa Class Entitas maka menggunakan Bundle() tidaklah tepat karena menjadi tidak efisien! Contoh kita punya class Entitas berikut

class Entitas_Anggota{
   String nama;
   String kota;
   
   public Entitas_Anggota(String nama, String kota){
      this.nama = nama;
      this.kota = kota;
   }	
   public String getNama(){
      return this.nama;
   }
   public String getKota(){
      return this.kota;
   }
}

kemudian memasukan data tersebut kedalam intent

Entitas_Anggota anggota = new Entitas_Anggota("bejo pamungkas","klaten");
Intent i = new Intent(this, Anggota.class);    
i.putExtra("NAMA", anggota.getNama());
i.putExtra("KOTA", anggota.getKota());
startActivity(i);

mendapatkan Bundle() melalui intent

public class Anggota extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anggota);
        String nama = getIntent().getStringExtra("NAMA");
        String kota = getIntent().getStringExtra("KOTA");
        int endl = 0;
    }
}

Bila yang daftar ternyata ada 10 anggota? tentu hal diatas kurang bagus satu-persatu

Parcelable

Sesuai kegunaanya – https://developer.android.com/guide/components/activities/parcelables-and-bundles?hl=id -kita bisa menggunakan Class Parcelable dengan implements methodnya, kita buat saja class Parcelable

public class Entitas_Anggota2 implements Parcelable {
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {

    }
}

kode lengkapnya sebagai berikut

public class Entitas_Anggota2 implements Parcelable {
    String nama;
    String kota;

    public Entitas_Anggota2(String nama, String kota){
        this.nama = nama;
        this.kota = kota;
    }

    protected Entitas_Anggota2(Parcel in) {
        nama = in.readString();
        kota = in.readString();
    }

    public static final Creator<Entitas_Anggota2> CREATOR = new Creator<Entitas_Anggota2>() {
        @Override
        public Entitas_Anggota2 createFromParcel(Parcel in) {
            return new Entitas_Anggota2(in);
        }

        @Override
        public Entitas_Anggota2[] newArray(int size) {
            return new Entitas_Anggota2[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(nama);
        parcel.writeString(kota);
    }
}

memasukan Parcelable ke Intent

Untuk memasukan parcelable ke intent gunakan perintah berikut

Entitas_Anggota2 anggota = new Entitas_Anggota2("bejo pamungkas","klaten");
Intent i = new Intent(this, Anggota.class);
i.putExtra("ANGGOTA", anggota);
startActivity(i)

kemudian untuk mendapatkan parcelable dari intent yaitu

Entitas_Anggota2 anggota = getIntent().getParcelableExtra("ANGGOTA");

Demikian kita telah bahas Komunikasi dan Pertukaran Data antar Intent menggunakan class Bundle dan Parcelable.

Leave a Reply

Your email address will not be published.




Enter Captcha Here :