Sobes.tech
Junior

Kuidas edastada andmeid ühest Activity'st teise Androidis?

sobes.tech AI

Vastus AI-lt

On on paar erinevad viisid:

  1. Intent Extras: Kõige levinum viis. Andmed pakitakse Bundle ja lisatakse Intent-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");
    }
    
  2. Parcelable objektid: Sarnaselt Serializable, kuid tõhusam sageli edastatavate objektide jaoks. Nõuab Parcelable liidese 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");
    
  3. 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
    
  4. 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;
    
  5. Andmebaas/Fail: Suuremate andmete või püsivate andmete jaoks. Andmed salvestatakse andmebaasi (SQLite, Room) või faili ning teine Activity loeb need sealt.

  6. 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.