Pertanyaan Bagaimana cara mengirim objek dari satu Aktivitas Android ke aktivitas lain menggunakan Niat?


Bagaimana saya bisa mengoper objek dari tipe kustom dari satu Aktivitas ke yang lain menggunakan putExtra() metode kelas Maksud?


743


asal


Jawaban:


Jika Anda hanya melewatkan objek di sekitar itu Dapat Dipaketkan dirancang untuk ini. Diperlukan sedikit usaha untuk menggunakan daripada menggunakan serial asli Java, tetapi caranya lebih cepat (dan maksud saya, CARA lebih cepat).

Dari dokumen, contoh sederhana untuk cara menerapkannya adalah:

// simple class that just has one member property as an example
public class MyParcelable implements Parcelable {
    private int mData;

    /* everything below here is for implementing Parcelable */

    // 99.9% of the time you can just ignore this
    @Override
    public int describeContents() {
        return 0;
    }

    // write your object's data to the passed-in Parcel
    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(mData);
    }

    // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
    public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
        public MyParcelable createFromParcel(Parcel in) {
            return new MyParcelable(in);
        }

        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };

    // example constructor that takes a Parcel and gives you an object populated with it's values
    private MyParcelable(Parcel in) {
        mData = in.readInt();
    }
}

Amati bahwa jika Anda memiliki lebih dari satu bidang untuk diambil dari Parcel tertentu, Anda harus melakukan ini dalam urutan yang sama dengan Anda memasukkannya (yaitu, dalam pendekatan FIFO).

Setelah Anda menerapkan objek Anda Parcelable itu hanya masalah menempatkan mereka ke Anda Maksud dengan putExtra ():

Intent i = new Intent();
i.putExtra("name_of_extra", myParcelableObject);

Kemudian Anda bisa menariknya kembali getParcelableExtra ():

Intent i = getIntent();
MyParcelable myParcelableObject = (MyParcelable) i.getParcelableExtra("name_of_extra");

Jika Kelas Obyek Anda mengimplementasikan Parcelable dan Serializable, maka pastikan Anda melakukan transmisi ke salah satu dari berikut:

i.putExtra("parcelable_extra", (Parcelable) myParcelableObject);
i.putExtra("serializable_extra", (Serializable) myParcelableObject);

683



Anda harus membuat serial objek Anda menjadi semacam representasi string. Satu kemungkinan representasi string adalah JSON, dan salah satu cara termudah untuk bersambung ke / dari JSON di android, jika Anda bertanya kepada saya, adalah melalui Google GSON.

Dalam hal ini Anda juse menempatkan nilai kembali string dari (new Gson()).toJson(myObject); dan mengambil nilai dan penggunaan string fromJson untuk mengubahnya kembali menjadi objek Anda.

Namun, jika objek Anda tidak terlalu kompleks, mungkin itu tidak sebanding dengan overhead, dan Anda dapat mempertimbangkan untuk meneruskan nilai objek yang terpisah.


160



Anda dapat mengirim objek serializable melalui maksud

// send where details is object
ClassName details = new ClassName();
Intent i = new Intent(context, EditActivity.class);
i.putExtra("Editing", details);
startActivity(i);


//receive
ClassName model = (ClassName) getIntent().getSerializableExtra("Editing");

And 

Class ClassName implements Serializable {
} 

142



Untuk situasi di mana Anda tahu Anda akan mengirimkan data dalam suatu aplikasi, gunakan "global" (seperti Kelas statis)

Sini apa Dianne Hackborn (hackbod - seorang Google Software Engineer Android) harus mengatakan tentang masalah ini:

Untuk situasi di mana Anda tahu aktivitasnya berjalan di tempat yang sama   proses, Anda hanya dapat berbagi data melalui global. Misalnya, Anda   bisa memiliki global HashMap<String, WeakReference<MyInterpreterState>>   dan ketika Anda membuat MyInterpreterState baru muncul dengan nama yang unik   untuk itu dan letakkan di peta hash; untuk mengirim negara itu ke negara lain   aktivitas, cukup cantumkan nama unik ke dalam peta hash dan kapan   Kegiatan kedua dimulai dapat mengambil MyInterpreterState dari   peta hash dengan nama yang diterimanya.


63



Kelas Anda harus mengimplementasikan Serializable atau Parcelable.

public class MY_CLASS implements Serializable

Setelah selesai Anda dapat mengirim objek di putExtra

intent.putExtra("KEY", MY_CLASS_instance);

startActivity(intent);

Untuk mendapatkan tambahan, Anda hanya perlu melakukannya

Intent intent = getIntent();
MY_CLASS class = (MY_CLASS) intent.getExtras().getSerializable("KEY");

Jika kelas Anda menerapkan penggunaan Parcelable selanjutnya

MY_CLASS class = (MY_CLASS) intent.getExtras().getParcelable("KEY");

Saya harap ini membantu: D


46



jika kelas objek Anda mengimplementasikan Serializable, Anda tidak perlu melakukan hal lain, Anda dapat mengirimkan objek yang dapat diprogram.
 itulah yang saya gunakan.


27



Jawaban singkat untuk kebutuhan cepat

1. Implementasikan Kelas Anda ke Serializable. 

Jika Anda memiliki Kelas batin jangan lupa untuk menerapkannya ke Serializable juga !!

public class SportsData implements  Serializable
public class Sport implements  Serializable

List<Sport> clickedObj;

2. Tempatkan objek Anda ke Intent 

 Intent intent = new Intent(SportsAct.this, SportSubAct.class);
            intent.putExtra("sport", clickedObj);
            startActivity(intent);

3. Dan terima objek Anda di Kelas Aktivitas lainnya

Intent intent = getIntent();
    Sport cust = (Sport) intent.getSerializableExtra("sport");

24