Sobes.tech
Junior

Kā pārsūtīt datus no vienas Activity uz otru Android?

sobes.tech AI

Atbilde no AI

Ir vairākas metodes:

  1. Intent Extras: Visbiežāk izmantotā metode. Dati tiek iepakoti Bundle un pievienoti Intent.

    // Pirmā Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("atslēga", "vērtība"); // Primīti tipi
    intent.putExtra("objekts", jauns MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Otrā Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String vērtība = extras.getString("atslēga");
        MySerializableObject objekts = (MySerializableObject) extras.getSerializable("objekts");
    }
    
  2. Parcelable objekti: Līdzīgi Serializable, bet efektīvāki bieži pārsūtāmiem objektiem. Prasa Parcelable interfeisa īstenošanu.

    // Pirmā Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_objekts", jauns MyParcelableObject());
    startActivity(intent);
    
    // Otrā Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableObjekts = intent.getParcelableExtra("parcelable_objekts");
    
  3. Shared Preferences: Piemērots nelielu datu pārsūtīšanai, kas jāglabā starp lietotnes palaiem.

    // Pirmā Activity
    SharedPreferences preferences = getSharedPreferences("manas_preferences", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("atslēga", "vērtība");
    editor.apply(); // vai commit()
    
    // Otrā Activity
    SharedPreferences preferences = getSharedPreferences("manas_preferences", MODE_PRIVATE);
    String vērtība = preferences.getString("atslēga", null); // null ir noklusējuma vērtība
    
  4. Statiskas mainīgās: Nav ieteicams, jo pārkāpj OOP principus un var novest pie atmiņas noplūdēm. Lietojiet ar piesardzību un tikai ļoti vienkāršos gadījumos.

    // Statiskajā klasē vai citur pieejamā statiskā mainīgā
    public static String staticData;
    
    // Pirmā Activity
    StaticDataHolder.staticData = "dati";
    
    // Otrā Activity
    String dati = StaticDataHolder.staticData;
    
  5. Datubāze/Fails: Lielāku datu vai ilgtermiņa datu glabāšanai. Dati tiek saglabāti datubāzē (SQLite, Room) vai failā, un otrā Activity tos nolas.

  6. ViewModel (kopā ar LiveData): Arhitektūras komponentu kontekstā ViewModel ir ieteicamākais veids, kā pārvaldīt UI saistītos datus. Dati starp Activity tiek pārsūtīti caur kopīgu ViewModel vai caur LiveData notikumiem.

    // Pirmā Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("datu_atslēga", "datu_vērtība")
    }
    startActivity(intent)
    
    // Otrā Activity (Kotlin)
    val dati = intent.getStringExtra("datu_atslēga")
    

Izvēle ir atkarīga no pārsūtāmo datu veida un apjoma, kā arī no prasībām par ilgtermiņa glabāšanu. Datu pārsūtīšana caur Intent Extras ir standarts nelielu datu apjomiem un tieši pārejot starp Activity.