Variablen über Activitys weitergeben

  • 19 Antworten
  • Letztes Antwortdatum
A

audacity363

Gast
Guten Abend

Habe mir einen kleinen Clienten für den RaspberryPi geschrieben.Um den Server einstellen zu kommen habe ich mir eine zweite Activity geschrieben, die mit einem Edittext und einem zurück Button ausgestattet ist.

Der Zurückbutton holt sich den Text mit:
Code:
String Server = Server_eingabe.getText().toString();
und gibt ihn mit:
Code:
MainActivity main = new MainActivity();
main.Server = Server;
Als letztes rufe ich dann die MainActivity mit:
Code:
Intent in = new Intent(second.this,MainActivity.class);
startActivity(in);
auf.
Laut dem Log wird der Text auch ohne Probleme übergeben aber irgendwie aktualisiert sich die Oberfläche nicht.
Ganz oben wird der Server angezeigt und dieser Text wird mit:
Code:
ServerView.setText(Server);
gesetzt. Anscheinend wird der Code aber nicht nochmal neu ausgelesen.
 
Um Werte zwischen Activities zu übergeben, bietet Android die Möglichkeit, dem Intent diese Werte mitzugeben.

Zum Beispiel:

Code:
Intent in = new Intent(second.this,MainActivity.class);
[B]in.putExtra("myServer", Server);[/B]
startActivity(in);

in der neuen Activity kannst du den Wert dann wieder holen:
Code:
[B]String myServer = getIntent().getStringExtra("myServer");[/B]

Was in deinem Fall ausserdem noch hilfreich sein könnte, ist startActivityForResult. Das ist extra dafür da, eine Activity zu starten, um von eben dieser Activity ein Resultat zu erhalten.

Ein ausführlicheres Beispiel gibts hier: Link
 
OK Danke aber auch dies funktioniert nicht. Die Variable wird jetzt zwar "sauber" übergeben aber trotzem aktualisiert sich die Main Activity nicht. Sie wird einfach zu angezeigt wie sie beim start der App aufgerufen wird.
 
steht das setText in onActivityResult?

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
So eine Activity gibt es nicht. Das setText steht in der mainActivity.
 
Das ist ne Methode, die implementiert werden muss, um startActivityForResult zu nutzen. Guck dir doch mal den link an, den Zoopa gepostet hat. Damit funktioniert das, was du vor hast am besten

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
OK Sry hatte die letzten Tage leider viel zu tun. Es funktioniert jetzt halbwegs. Müsste zwei neue Activitys einbinden. Natürlich nicht gleichzeitig sondern nacheinander. Die erste funktioniert auch aber bei dem zweiten sagt er mir:
"java.lang.RuntimeException: Unable to start activity ComponentInfo{com.raspberrypi.steuerung/com.raspberrypi.steuerung.button_konfig}: java.lang.NullPointerException"
Sie ist in der Manifest eingetragen und auch die Verlinkung weißt laut Eclipse keine Fehler auf:
Code:
Intent h = new Intent(this, button_konfig.class);
startActivityForResult(h, 1);
 
Da ist ein NullPointer in der onCreate-Methode von button_konfig. Poste doch mal den Code davon und am besten den ganzen Logcat-Eintrag. Vor allem den Teil, der "Caused by:..." enthält. Da steht die Zeile, die das Problem bereitet ;)
 
OKey habs war nicht meine Schuld... Eclipse hat rumgebugt und die R.java nicht richtig geladen. Hatte nachher auch noch den Fehler das angeblich keine Manifest Datei vorhanden währe.
 
Hallo
ich hab nochmal eine Frage zu startActivityForResult. Nach dem was bei Stackoverflow und dem was ich bei Google gefunden habe kann man immer nur eine Variable übergeben. Ich habe jetzt das Problem das ich drei übergeben muss. startActivityForResult hat aber nur zwei Argumente und wenn ich das ganze nochmal mache ,mit anderen Werten, bekomme ich eine RuntimeException. Wenn ich die so übergebe:
Code:
MainActivity main = new MainActivity();
main.Server1 = Server_eingabe.getText().toString();
kann es ja nicht funktionieren weil ja alle Variablen neu Deklariert werden.
 
Es ist egal, ob du startActivity oder startActivityForResult verwendest. Wenn du Daten übergeben willst, machst du das so, wie weiter oben beschrieben. Der zweite Parameter von startActivityForResult ist nur ein requestCode, um später unterscheiden zu können, woher dein Aufruf kommt. Das ist nützlich, wenn du verschiedene Activities mit startActivityForResult starten willst, weil du dann beim Resultat ja wissen willst, woher das Resultat kommt.
 
  • Danke
Reaktionen: audacity363
OKey Danke habe aber mittlerweile eine "schönere" Lösung gefunden: SharedPreferences
 
Naja.. das ist aber nur schöner wenn es wirklich Preferences sind.
Also die Werte wirklich dauerhaft gespeichert werden sollen.

Ansonsten ist dei Übergabe über Extras die "schönere" Variante, meiner Meinung nach. ;)
 
Und dies ist bei mir der Fall. Habe sonst alles in Dateien geschrieben...
 
Dann sollten SharedPreferences die richtige Lösung sein ;)
 
Ich verstehe immer noch nicht warum man nicht mehrere Variablen in einem Bundle mit dem Intent übergeben kann.

Bei einem normalen Startactivity geht es doch auch warum also nicht bei einem Startactivityforresult. Das ist doch im Endeffekt das gleiche nur das es eben den Requestcode extra hat.
 
Wieso sollte das nicht gehen?
Das funktioniert doch genauso wie beim normalen Starten von Acitivities
 
Ja eben deshalb versteh ich den Umweg über die SharedPreferences irgendwie nicht.
 
Na in diesem Fall übergibt er ja eine Preference, also Einstellung, deswegen ist das hier kein Umweg.
Es ist sogar um einiges schöner, als immer startActivityForResult einzusetzen.
 
JustinTime schrieb:
Ich verstehe immer noch nicht warum man nicht mehrere Variablen in einem Bundle mit dem Intent übergeben kann.

Kann man doch.. Wie der Name schon sagt budle sonst würde es ja was mit singel sein xd

LG. Dagobert

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Zurück
Oben Unten