Sobes.tech
Junior

Wie kann man Daten von einer Activity zu einer anderen in Android übertragen?

sobes.tech KI

Antwort von AI

Es gibt mehrere Möglichkeiten:

  1. Intent-Extras: Die gebräuchlichste Methode. Die Daten werden in einem Bundle verpackt und an den Intent angehängt.

    // In der ersten Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("Schlüssel", "Wert"); // Primitive Typen
    intent.putExtra("Objekt", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // In der zweiten Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String wert = extras.getString("Schlüssel");
        MySerializableObject objekt = (MySerializableObject) extras.getSerializable("Objekt");
    }
    
  2. Parcelable-Objekte: Ähnlich wie Serializable, aber effizienter für häufig übertragene Objekte. Erfordert die Implementierung des Parcelable-Interfaces.

    // In der ersten Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_objekt", new MyParcelableObject());
    startActivity(intent);
    
    // In der zweiten Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableObjekt = intent.getParcelableExtra("parcelable_objekt");
    
  3. Shared Preferences: Geeignet für kleine Datenmengen, die zwischen App-Starts gespeichert werden sollen.

    // In der ersten Activity
    SharedPreferences preferences = getSharedPreferences("meine_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("Schlüssel", "Wert");
    editor.apply(); // oder commit()
    
    // In der zweiten Activity
    SharedPreferences preferences = getSharedPreferences("meine_prefs", MODE_PRIVATE);
    String wert = preferences.getString("Schlüssel", null); // null ist der Standardwert
    
  4. Statische Variablen: Nicht empfohlen, da es gegen OOP-Prinzipien verstößt und zu Speicherlecks führen kann. Nur für sehr einfache Fälle mit Vorsicht verwenden.

    // In einer statischen Klasse oder einer anderen zugänglichen statischen Variablen
    public static String statischeDaten;
    
    // In der ersten Activity
    StaticDataHolder.statischeDaten = "Daten";
    
    // In der zweiten Activity
    String daten = StaticDataHolder.statischeDaten;
    
  5. Datenbank/Datei: Für große Datenmengen oder persistent zu speichernde Daten. Die Daten werden in einer Datenbank (SQLite, Room) oder Datei gespeichert und in der zweiten Activity gelesen.

  6. ViewModel (gemeinsam mit LiveData): Im Kontext architektonischer Komponenten ist ViewModel die bevorzugte Methode zur Verwaltung von UI-bezogenen Daten. Daten zwischen Activities werden über ein gemeinsames ViewModel oder durch Ereignisse in LiveData übertragen.

    // In der ersten Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("daten_schlüssel", "daten_wert")
    }
    startActivity(intent)
    
    // In der zweiten Activity (Kotlin)
    val daten = intent.getStringExtra("daten_schlüssel")
    

Die Wahl der Methode hängt vom Typ und Volumen der zu übertragenden Daten sowie von Persistenzanforderungen ab. Datenübertragung über Intent Extras ist Standard für kleine Datenmengen und direkte Übergänge zwischen Activities.