Kuidas edastada andmeid ühest Activity'st teise Androidis?
sobes.tech AI
Vastus AI-lt
On on paar erinevad viisid:
-
Intent Extras: Kõige levinum viis. Andmed pakitakse
Bundleja lisatakseIntent-i.// Esimene Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("võti", "väärtus"); // Primitiivsed tüübid intent.putExtra("objekt", uus MySerializableObject()); // Serializable startActivity(intent); // Teine Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String väärtus = extras.getString("võti"); MySerializableObject objekt = (MySerializableObject) extras.getSerializable("objekt"); } -
Parcelable objektid: Sarnaselt
Serializable, kuid tõhusam sageli edastatavate objektide jaoks. NõuabParcelableliidese implementeerimist.// Esimene Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("parcelable_objekt", uus MyParcelableObject()); startActivity(intent); // Teine Activity Intent intent = getIntent(); MyParcelableObject parcelableObjekt = intent.getParcelableExtra("parcelable_objekt"); -
Shared Preferences: Sobib väikeste andmete edastamiseks, mis peavad jääma alles rakenduse sulgemise vahel.
// Esimene Activity SharedPreferences preferences = getSharedPreferences("minu_eelistused", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("võti", "väärtus"); editor.apply(); // või commit() // Teine Activity SharedPreferences preferences = getSharedPreferences("minu_eelistused", MODE_PRIVATE); String väärtus = preferences.getString("võti", null); // null on vaikimisi väärtus -
Statilised muutujad: Ei soovitata, kuna rikub OOP põhimõtteid ja võib põhjustada mälulekkeid. Kasutage ettevaatusega ja ainult väga lihtsate juhtumite puhul.
// Statilises klassis või muul viisil kättesaadava statilise muutujana public static String staticData; // Esimene Activity StaticDataHolder.staticData = "andmed"; // Teine Activity String andmed = StaticDataHolder.staticData; -
Andmebaas/Fail: Suuremate andmete või püsivate andmete jaoks. Andmed salvestatakse andmebaasi (SQLite, Room) või faili ning teine Activity loeb need sealt.
-
ViewModel (koos LiveData-ga): Arhitektuurikomponentide kontekstis on ViewModel eelistatud viis UI-ga seotud andmete haldamiseks. Andmed Activity vahel edastatakse jagatud ViewModeli või LiveData sündmuste kaudu.
// Esimene Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("andmete_otsing", "andmete_väärtus") } startActivity(intent) // Teine Activity (Kotlin) val andmed = intent.getStringExtra("andmete_otsing")
Valik sõltub edastatavate andmete tüübist ja mahust ning nõuetest püsivuse osas. Andmete edastamine Intent Extras kaudu on standard väikeste andmemahtude ja otse Activity vahetu ülemineku puhul.