EditText und Fehler beim parsen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • EditText und Fehler beim parsen

    Hallo Gemeinde,

    ich versuche aus 2 EditText Feldern die Inhalte auszuleden, in Integer umzuwandeln, zu berechnen un danschließemd als TOAST auszugeben.
    Leider bleibt das Ergebnis beim berechnen immer 0.

    EditText

    Java-Quellcode

    1. <EditText
    2. android:id="@+id/tf_angebot"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:layout_below="@+id/txt_info_handelsrechner"
    6. android:layout_centerHorizontal="true"
    7. android:layout_marginTop="30dp"
    8. android:ems="10"
    9. android:inputType="number"
    10. android:digits="0123456789"
    11. android:text="@string/tf_angebot" >
    12. <requestFocus />
    13. </EditText>
    14. <EditText
    15. android:id="@+id/tf_kosten"
    16. android:layout_width="wrap_content"
    17. android:layout_height="wrap_content"
    18. android:layout_alignLeft="@+id/txt_angebot"
    19. android:layout_below="@+id/txt_angebot"
    20. android:layout_marginTop="20dp"
    21. android:ems="10"
    22. android:inputType="number"
    23. android:digits="0123456789"
    24. android:text="@string/tf_kosten" />
    Alles anzeigen


    Methode HandelBerechnen()

    Java-Quellcode

    1. public void HandelBerechnen(View view) {
    2. TextView textView1;
    3. TextView textView2;
    4. int Berechnung = 0;
    5. String Angebot;
    6. String Kosten;
    7. String Ergebnis = "";
    8. // Eingabefelder auslesen
    9. textView1 = (TextView) findViewById(R.id.tf_angebot);
    10. textView2 = (TextView) findViewById(R.id.tf_kosten);
    11. Angebot = textView1.getText().toString();
    12. Kosten = textView2.getText().toString();
    13. // Handel auf 400er Stacks berechnen
    14. Berechnung = (Integer.parseInt(Kosten) / Integer.parseInt(Angebot)) * 400;
    15. // Wenn kein Fehler bein Stringparsen, als TOAST ausgeben
    16. try {
    17. Ergebnis = String.valueOf(Berechnung);
    18. //Ergebnis = "Angebot: " + Angebot + "\nKosten: " + Kosten;
    19. Toast toast = Toast.makeText(this, Ergebnis, Toast.LENGTH_LONG);
    20. //Toast toast = Toast.makeText(this, "Ein 400er Stack kostet dich: " + Ergebnis, Toast.LENGTH_LONG);
    21. toast.setGravity(Gravity.CENTER, 0, 0);
    22. toast.show();
    23. }
    24. // Wenn Fehler, Fehlermeldung als TOAST ausgeben
    25. catch (Exception e) {
    26. Toast toast = Toast.makeText(this, "Es ist ein Fehler aufgetreten!", Toast.LENGTH_LONG);
    27. toast.setGravity(Gravity.CENTER, 0, 0);
    28. toast.show();
    29. }
    30. }
    Alles anzeigen



    Danke für die Hilfe,

    Gruß Timee
  • Hi Timee,

    noch als Tipp:

    1.) in Java hat sich die Naming Conventions durchgesetzt das Variablen (zbsp. String Objekte oder int Variablen) mit einem kleinen Buchstaben beginnen. Wenn man sich an diese Convention hält ist es vorallem für andere leichter deinen Code zu lesen bzw zu vestehen.

    2.) im try/catch solltest du dir immer aber aufjedenfall wärend der Entwicklung den Stacktrace oder die Message ausgeben lassen. EIn einfacher Toast mit "Es ist ein Fehler aufgetreten" wird dir bei Fehlersuchen wenig helfen.

    wie gesagt sind nur Tipps.

    Mfg Titus
  • Danke für die Hilfe und die Tipps.
    Tipps werden gerne angenommen und auch versucht umzusetzten.
    Mit double statt int habe ich meine Berechnungen hinbekommen.


    Gruß
    Timee


    P.S. anbei noch das Ergebnis zum Nachschlagen oder zum Verbessern ^^

    Java-Quellcode

    1. public class HandelsrechnerActivity extends Activity {
    2. @Override
    3. public void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_handelsrechner);
    6. }
    7. public boolean Zahlenprüfung (String s) {
    8. // Prüfen ob String LEER ist
    9. if (s.equals("")) {
    10. return false;
    11. }
    12. else {
    13. return true;
    14. }
    15. }
    16. public void HandelBerechnen(View view) {
    17. TextView textView1;
    18. TextView textView2;
    19. double berechnung = 0;
    20. String angebot;
    21. String kosten;
    22. // Eingabefelder auslesen
    23. textView1 = (TextView) findViewById(R.id.tf_angebot);
    24. textView2 = (TextView) findViewById(R.id.tf_kosten);
    25. angebot = textView1.getText().toString();
    26. kosten = textView2.getText().toString();
    27. // Prüfung auf NICHT LEER
    28. if (Zahlenprüfung(angebot) == true && Zahlenprüfung(kosten) == true) {
    29. try {
    30. // Handel auf 400er Stacks berechnen
    31. berechnung = (Double.parseDouble(kosten) / Double.parseDouble(angebot)) * 400;
    32. // Runden auf 2 Nachkommastellen
    33. berechnung = Math.round(berechnung*100)/100.0;
    34. // Werte <= 0 nicht anzeigen, da sinnlos
    35. if (berechnung <= 0) {
    36. Toast toast = Toast.makeText(this, "Das Ergebnis ist <= 0 und somit nutzlos!", Toast.LENGTH_SHORT);
    37. toast.setGravity(Gravity.CENTER, 0, 0);
    38. toast.show();
    39. }
    40. else {
    41. // Ausgabe der Berechnung
    42. Toast toast = Toast.makeText(this, "Ein 400er Stack kosten dich " + String.valueOf(berechnung), Toast.LENGTH_LONG);
    43. toast.setGravity(Gravity.CENTER, 0, 0);
    44. toast.show();
    45. }
    46. }
    47. catch (Exception e) {
    48. Toast toast = Toast.makeText(this, "Bei der Berechnung ist ein Fehler aufgetreten!", Toast.LENGTH_SHORT);
    49. toast.setGravity(Gravity.CENTER, 0, 0);
    50. toast.show();
    51. }
    52. }
    53. else {
    54. Toast toast = Toast.makeText(this, "Eines oder beide Felder sind nicht ausgefüllt!", Toast.LENGTH_SHORT);
    55. toast.setGravity(Gravity.CENTER, 0, 0);
    56. toast.show();
    57. }
    58. }
    59. }
    Alles anzeigen
  • Wenn du lernwillig bist, dann noch ein kleiner Tipp.

    Jedes mal wenn du jetzt eine Berechnung ausführst, musst du dir die Views (Textfeld) ect holen.
    Bei 2 Feldern ist das auch noch nicht so performance relevant, aber wenn es mehr werden kann das schon bremsen.

    Deswegen hol dir doch die Views in deiner OnCreate Methode (das layout hat ja auch so lange Bestehen),
    packe es in eine Variable und benutze die... das spart dir ein paar Aufrufe von findView


    Java-Quellcode

    1. private TextView textView1;
    2. private TextView textView2;
    3. @Override
    4. public void onCreate(Bundle savedInstanceState) {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.activity_handelsrechner);
    7. // Eingabefelder auslesen
    8. textView1 = (TextView) findViewById(R.id.tf_angebot);
    9. textView2 = (TextView) findViewById(R.id.tf_kosten);
    10. }
    Alles anzeigen