EditText -> eingabe in variable speichern

  • Antworten:32
  • Bentwortet
Christian Hof
  • Forum-Beiträge: 50

01.03.2011, 18:40:22 via Website

Hey Leute,

also mein vorhaben ist es, eine Zahl, welche in ein EditText eingegeben wurde in einer Variable zu speichern. Die Variable wiederrum soll vom Typ int sein, weil ich damit rechnen muss.

Ich hab mein Buch durchsucht, nichts gefunden. Hab auch mal im Forum gesucht, hab leider nur ein Beitrag gefunden, aber nicht verstanden :(

Habt ihr ein einfaches und leicht verständliches beispiel parat? :)

Danke

LG Christian

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

01.03.2011, 18:43:37 via App

Hey,
1int i = Integer.valueOf(edittext.getText().toString());
Lg Ansgar
edit: Achtung, wenn der Text nicht in eine Zahl umgewandelt werden kann, fliegt ne Exception (=App stürzt ab). Deswegen am besten inputType im xml auf 'number' oder 'signednumber' stellen.

— geändert am 01.03.2011, 18:46:25

Antworten
Christian Hof
  • Forum-Beiträge: 50

01.03.2011, 19:09:12 via Website

Hey,

danke für deine schnelle Antwort :)

Also ganz verkehrt lag ich mit dem Integer doch nicht :)

im moment sieht es bei mir so aus:
1a = Integer.valueOf(zahl1.getText().toString());

Und das steht in der methode onCreate
1zahl1 = findViewById(R.id.edt_firstfigure);

Allerdings bekomme ich eine Fehlermeldung:
Und zwar besagt die, das das getText() nicht definiert ist für View. Also habe ich getContext() genommen. Um zu schauen, ob es damit geht habe ich das geschrieben:
1a = Integer.valueOf(zahl1.getContext().toString());
2 ausgabe.setText("Die Zahl ist " + a);
3 setContentView(ausgabe);

und bekomme folgenden Fehler:
03-01 18:04:00.615: ERROR/AndroidRuntime(319): java.lang.NumberFormatException: unable to parse 'de.ChrisH.TabWidget.SongsActivity@44e9ee30' as integer

Also hat das mit dem Umwandeln in Integer und speichern doch nicht so geklappt. Dein Edit, habe ich berücksichtigt und beide Fehler mit number versehen.

Antworten
Gian U.
  • Forum-Beiträge: 117

01.03.2011, 19:19:44 via Website

Du musst die View zu einer EditText casten, dann sollte es funktionieren.

Mnemono - Efficient learning!

Antworten
Christian Hof
  • Forum-Beiträge: 50

01.03.2011, 19:35:09 via Website

Ich kann dir gerade nicht ganz folgen.

Was casten ist weiß ich, auch wenn ich es noch nie genutzt habe.

Was genau soll ich von View in EditText casten?

View wäre ja nur zahl1 und das in ein EditText zu casten würde ja bedeuten ich brauch noch eine Variable -> mehr speicher wird benötigt.

Das würde da so aussehen:
1zahl3 = (TextView) zahl1;
2 a = Integer.valueOf(zahl3.getText().toString());
3 ausgabe.setText(a);
4 setContentView(ausgabe);

Achja und die Fehlermeldung so:
03-01 18:34:45.255: ERROR/AndroidRuntime(377): Uncaught handler: thread main exiting due to uncaught exception
03-01 18:34:45.285: ERROR/AndroidRuntime(377): android.content.res.Resources$NotFoundException: String resource ID #0x5
03-01 18:34:45.285: ERROR/AndroidRuntime(377): at android.content.res.Resources.getText(Resources.java:200)
...
...
....

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

01.03.2011, 19:47:56 via Website

Ein Context liefert aber keine Zahl!
Dein Fehler liegt hier:

setContentView(ausgabe);

Du musst die Ausgabe entsprechend in ein Ausgabe Textfeld schreiben nicht den ContentView setzten !

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Christian Hof
  • Forum-Beiträge: 50

01.03.2011, 20:17:51 via Website

Wenn Context nicht das liefert was ich will, habs mir gerade nochmal druchgelesen, dann ist es für mich ja auch uninteressant :)

Deswegen habe ich ja auch, siehe vorigem Post, zahl1 gecasted. Und dann mit zahl3 weitergearbeitet. Wo dann auch ein getText() funktioniert.

somit enthällt ja ausgabe eigentlich eine Zahl... und ich hab es geschaft eine ausgabe zu erhalten :D
1OnClickListener resultListener = new OnClickListener() {
2 public void onClick(View v) {
3 zahl3 = (TextView) zahl1;
4 a = Integer.valueOf(zahl3.getText().toString());
5 String text = String.valueOf(a);
6 ausgabe.setText(text);
7 }
Elegant würde ich sagen ist etwas anderes :D aber es Funktioniert erstmal. :) An alle Danke die mir geholfen haben.

Ich finde das mit dem casten etwas umständlich gibts da noch eine einfachere möglichkeit? also anstelle noch eine neue Variable zu verwenden (bezogen auf zahl3).

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

01.03.2011, 20:38:40 via App

Ja,
geht leichter, in dem du für deine zahl1 als Typ EditText nimmst:
1EditText zahl1;
und sie so zuweist:
1zahl1 = (EditText) findViewById(R.id.edittext);
Lg Ansgar

Antworten
Christian Hof
  • Forum-Beiträge: 50

01.03.2011, 20:40:23 via Website

Herzlichen Dank :) werde ich später einbauen nun gibts erstmal zur feier des Tages was zu Essen :) der Euklidische Algorithmus Funktioniert :)

Danke nochmal an alle :)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

02.03.2011, 16:52:24 via App

Christian Hof
... der Euklidische Algorithmus ...
Ist das der zum Ausrechnen des größten gemeinsamen Teilers? :grin: Hatten wir grad in der Schule in Informatik..
Lg Ansgar

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

18.04.2011, 14:03:03 via Website

So, ich klink mich hier mal ein:
Ich hab einen EditText und möchte die Zahl daraus in der Variable height speichern. Ich bekomms aber nicht hin.
In der Main.xml:
1<EditText android:id="@+id/inputheight"
2 android:layout_width="fill_parent"
3 android:layout_height="wrap_content"
4 android:hint="@string/height"
5 android:inputType="number">
6 </EditText>
Und hab in der Java Datei
1double height;
definiert. Was muss ich jetzt schreiben, dass die Zahl aus der EditText inputheight in die Variable height bekomme?

Danke schonmal
Ludwig

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

18.04.2011, 14:34:45 via App

Danke! ich werde es später mal ausprobieren.
Müsste ja schon durch das "android:inputType="number" " abgefangen sein. ;)

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

18.04.2011, 14:49:30 via Website

luhu
Danke! ich werde es später mal ausprobieren.
Müsste ja schon durch das "android:inputType="number" " abgefangen sein. ;)

sicher nicht

swordiApps Blog - Website

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

18.04.2011, 14:58:13 via Website

die eingabe über "inputtype="number" sieht bei jedem gerät anders aus.

swordiApps Blog - Website

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

18.04.2011, 16:12:27 via App

ah, Ok. und wie fragt man sowas dann ab? :)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

18.04.2011, 16:17:28 via App

Hm,
aber wenn ich bei mir input type auf "number" stelle, seh ich zwar + / etc, aber soe funktionieren nicht.. Vllt Copy&Paste? Ich probier's mal.
Bin bisher davon ausgegangen, dass mir das input type das sichert..
Lg Ansgar

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

18.04.2011, 16:58:23 via Website

luhu
ah, Ok. und wie fragt man sowas dann ab? :)

Mit Hilfe eines try-catch-Blockes ;)

Wenn du in die Doc schaust siehst du, dass bei Fehlschlag der Funktion die Exception NumberFormatException geworfen wird.

Daher fängst du das ganze mit

1try {
2 height = Double.parseDouble(inputHeight.gettext());
3} catch (NumberFormatException ex) {
4 // Hier der Code, der dann ausgeführt werden soll
5}

ab.

Also volles Beispiel:

EditText in der layout.xml definiert mit der ID inputheight.
Dann in deiner Activity:

1EditText inputHeight = (EditText) findViewById(R.id.inputheight);
2try {
3 Double height = Double.parseDouble(inputHeight.gettext());
4} catch (NumberFormatException ex) {
5 // Fehlerbehandlung (Ausgabe an den User oder sowas)
6}

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

18.04.2011, 19:30:06 via Website

Rafael K.
So aus dem Kopf

1height = Double.parseDouble( ((EditText)findViewById( R.id.inputheight )).getText() );

Das schmeisst aber eine NumberFormatException, wenn der Text keine gültige Zahl ist.
Das musst du dann abfangen.

So, hab das jetzt mal ausprobiert. Bekomme aber links in Eclipse die Fehlermeldung "EditText cannot be resolved to a type", wenn ich dann auf den Lösungsvorschlag "Rename in file" anklicke, passiert aber nix...
Wär nochmal für ein bisschen Hilfe sehr dankbar :)

lg
Ludwig

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

18.04.2011, 19:37:16 via Website

Oliver D.
luhu
ah, Ok. und wie fragt man sowas dann ab? :)

Mit Hilfe eines try-catch-Blockes ;)

Wenn du in die Doc schaust siehst du, dass bei Fehlschlag der Funktion die Exception NumberFormatException geworfen wird.

Daher fängst du das ganze mit

1try {
2 height = Double.parseDouble(inputHeight.gettext());
3} catch (NumberFormatException ex) {
4 // Hier der Code, der dann ausgeführt werden soll
5}

ab.

Also volles Beispiel:

EditText in der layout.xml definiert mit der ID inputheight.
Dann in deiner Activity:

1EditText inputHeight = (EditText) findViewById(R.id.inputheight);
2try {
3 Double height = Double.parseDouble(inputHeight.gettext());
4} catch (NumberFormatException ex) {
5 // Fehlerbehandlung (Ausgabe an den User oder sowas)
6}

Danke, Oli!

Wollte das jetzt so übernehmen, bekomme aber eine Fehlermeldung (wie immer halt :D ). Und zwar meckert er über das "parseDouble": "The method parseDouble(String) in the type Double is not applicable for the arguments (Editable)"
any ideas? :(

— geändert am 18.04.2011, 19:38:15

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

18.04.2011, 19:48:14 via Website

luhu


Danke, Oli!

Wollte das jetzt so übernehmen, bekomme aber eine Fehlermeldung (wie immer halt :D ). Und zwar meckert er über das "parseDouble": "The method parseDouble(String) in the type Double is not applicable for the arguments (Editable)"
any ideas? :(

Ah sry, mach hinter das gettext() noch ein .tostring() ;)

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

18.04.2011, 21:08:11 via Website

Oliver D.
luhu


Danke, Oli!

Wollte das jetzt so übernehmen, bekomme aber eine Fehlermeldung (wie immer halt :D ). Und zwar meckert er über das "parseDouble": "The method parseDouble(String) in the type Double is not applicable for the arguments (Editable)"
any ideas? :(

Ah sry, mach hinter das gettext() noch ein .tostring() ;)

So, scheint jetzt zu funktionieren.
Aber: Muss ich die Variablen (z.b. height) jetzt noch vorher initialisieren?
wenn ich vorher noch "double height;" reinschreibe meckert er bei
1//Zahl aus dem EditText in Variable height übernehmen
2 EditText inputHeight = (EditText) findViewById(R.id.inputheight);
3 try {
4 Double height = Double.parseDouble(inputHeight.getText().toString());
5 } catch (NumberFormatException ex) {
6 // Fehlerbehandlung (Ausgabe an den User per Popup)
7
8 Context context = getApplicationContext();
9 CharSequence text = "Bitte gebe eine gültige Zahl ein!";
10 int duration = Toast.LENGTH_SHORT;
11
12 Toast toast = Toast.makeText(context, text, duration);
13 toast.show();
14
15 }
(fettgedruckt: Zeile 4) herum, ich soll die Variable umbennen (height1).
Wenn ich es nicht reinschreibe meckert er in der Rechnung rum "height cannot be resolved to a variable". :(

bräuchte nochmal ein bisschen Starthilfe :)

— geändert am 18.04.2011, 21:08:31

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

18.04.2011, 21:13:44 via Website

sichtbarkeit von variablen
und
initialisierung von variablen

wären mal themen, die du dir aneignen sollst.

da fehlen grundlagen. am besten mal "java ist auch eine insel" durchlesen.

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

18.04.2011, 21:16:00 via Website

luhu
Oliver D.
luhu


Danke, Oli!

Wollte das jetzt so übernehmen, bekomme aber eine Fehlermeldung (wie immer halt :D ). Und zwar meckert er über das "parseDouble": "The method parseDouble(String) in the type Double is not applicable for the arguments (Editable)"
any ideas? :(

Ah sry, mach hinter das gettext() noch ein .tostring() ;)

So, scheint jetzt zu funktionieren.
Aber: Muss ich die Variablen (z.b. height) jetzt noch vorher initialisieren?
wenn ich vorher noch "double height;" reinschreibe meckert er bei
1//Zahl aus dem EditText in Variable height übernehmen
2 EditText inputHeight = (EditText) findViewById(R.id.inputheight);
3 try {
4 Double height = Double.parseDouble(inputHeight.getText().toString());
5 } catch (NumberFormatException ex) {
6 // Fehlerbehandlung (Ausgabe an den User per Popup)
7
8 Context context = getApplicationContext();
9 CharSequence text = "Bitte gebe eine gültige Zahl ein!";
10 int duration = Toast.LENGTH_SHORT;
11
12 Toast toast = Toast.makeText(context, text, duration);
13 toast.show();
14
15 }
(fettgedruckt: Zeile 4) herum, ich soll die Variable umbennen (height1).
Wenn ich es nicht reinschreibe meckert er in der Rechnung rum "height cannot be resolved to a variable". :(

bräuchte nochmal ein bisschen Starthilfe :)

Ja gut, die Variable height ist nur im try {}-Bereich eindeutig deklariert, ich würde dann auch die Rechnung im try {}-Bereich durchführen, weil du ja, falls der Wert nicht richtig geparsed werden kann, auch nicht mit ihm weiterrechnen kannst.
Im Falle der exception wird dann der Rest des try-Codes abgebrochen und die catch-Anweisung ausgeführt, d.h. die Rechenoperation wird erst gar nicht ausgeführt.

Falls du das jedoch anders lösen willst musst du eben die Variable vor try deklarieren, also einfach
1Integer height = 0.0;
davorsetzen und das Integer im try {}-Bereich entfernen, um eine Doppeldeklaration zu verhindern.

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

30.04.2011, 22:42:07 via Website

Hi,


so, da das mit Zahlen alles geklappt hat, bin ich grad am rumprogrammieren für meine 2. App :)
Dafür will ich den eingegebenen Text eines EditTexts in einen String speichern.
Das sollte ja eigentlich so funktionieren:
1EditText EINGABE = (EditText) findViewById(R.id.EINGABE);
2String VARIABLE = EINGABE.getText().toString();
Tuts aber nicht :( DIe App verabschiedet sich einfach.
Wüsste nicht, was ich da für eine Exception abfangen könnte...

Im Log finde ich auch nichts aussagekräftiges...
104-30 20:32:53.271: ERROR/AndroidRuntime(3487): Uncaught handler: thread main exiting due to uncaught exception

any ideas?

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

30.04.2011, 22:56:28 via Website

Hi,

bist du dir sicher, dass es an diesen Codezeilen liegt?
Poste doch mal den gesamten Errorcode.
Irgendwo im Errorcode ist auch die betroffene Zeile im Quelltext genannt ;)

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

30.04.2011, 23:03:08 via Website

jo, wenn ich die beiden Zeilen auskommentiere und den String selber definiere klappts.
Hier der gesamte Errorcode:
104-30 21:01:51.414: WARN/dalvikvm(417): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
204-30 21:01:51.424: ERROR/AndroidRuntime(417): Uncaught handler: thread main exiting due to uncaught exception
304-30 21:01:51.464: ERROR/AndroidRuntime(417): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.helloandroid.imagedownloader/com.helloandroid.imagedownloader.AndroAsync}: java.lang.NullPointerException
404-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
504-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
604-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
704-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
804-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.os.Handler.dispatchMessage(Handler.java:99)
904-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.os.Looper.loop(Looper.java:123)
1004-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.ActivityThread.main(ActivityThread.java:4363)
1104-30 21:01:51.464: ERROR/AndroidRuntime(417): at java.lang.reflect.Method.invokeNative(Native Method)
1204-30 21:01:51.464: ERROR/AndroidRuntime(417): at java.lang.reflect.Method.invoke(Method.java:521)
1304-30 21:01:51.464: ERROR/AndroidRuntime(417): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
1404-30 21:01:51.464: ERROR/AndroidRuntime(417): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
1504-30 21:01:51.464: ERROR/AndroidRuntime(417): at dalvik.system.NativeStart.main(Native Method)
1604-30 21:01:51.464: ERROR/AndroidRuntime(417): Caused by: java.lang.NullPointerException
1704-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.Activity.findViewById(Activity.java:1612)
1804-30 21:01:51.464: ERROR/AndroidRuntime(417): at com.helloandroid.imagedownloader.AndroAsync.<init>(AndroAsync.java:47)
1904-30 21:01:51.464: ERROR/AndroidRuntime(417): at java.lang.Class.newInstanceImpl(Native Method)
2004-30 21:01:51.464: ERROR/AndroidRuntime(417): at java.lang.Class.newInstance(Class.java:1479)
2104-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
2204-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
2304-30 21:01:51.464: ERROR/AndroidRuntime(417): ... 11 more

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

30.04.2011, 23:17:06 via Website

luhu

104-30 21:01:51.464: ERROR/AndroidRuntime(417): Caused by: java.lang.NullPointerException
Deine Exception: NullPointerException

luhu

104-30 21:01:51.464: ERROR/AndroidRuntime(417): at android.app.Activity.findViewById(Activity.java:1612)
Es liegt also am findViewById....

Du benutzt AsyncTask? Evtl. liegts daran...

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

30.04.2011, 23:39:19 via Website

Es liegt also am findViewById....

Du benutzt AsyncTask? Evtl. liegts daran...

Hm, das passt aber alles. Die Textview ist richtig bezeichnet.

Was meinst du damit? Ist das schlimm :D

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

30.04.2011, 23:50:02 via App

luhu
Es liegt also am findViewById....

Du benutzt AsyncTask? Evtl. liegts daran...

Hm, das passt aber alles. Die Textview ist richtig bezeichnet.

Was meinst du damit? Ist das schlimm :D

Hm, also ich mach das immer so, dass ich in onCreate alle Views definiere, die im Layout vorhanden sind.

Verschieb doch mal die Definition auch in onCreate, wenn möglich. Den Text lesen kannste im AsyncTask ja immernoch.

Vielleicht kann AsyncTask, als parallel ablaufender Task, nicht auf das Layout der Activity zugreifen.

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Ludwig H.

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

30.04.2011, 23:59:33 via Website

Ahaa, Danke, habs jetzt hinbekommen. Das Problem war, dass ich es in die Methode mit reinnehmen musste, statt es davor in der OnCreate zu haben. Frag mich aber nicht warum :D
Danke!

Antworten
Gelöschter Account
  • Forum-Beiträge: 408

01.05.2011, 00:02:52 via Website

luhu
Ahaa, Danke, habs jetzt hinbekommen. Das Problem war, dass ich es in die Methode mit reinnehmen musste, statt es davor in der OnCreate zu haben. Frag mich aber nicht warum :D
Danke!

Hm, na gut, hauptsache es funzt jetzt ;-)

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten