Android Taschenrechner App mit Grundrechenarten: Fehler beim casten von String (TextEdit) zu Double! [Android Studio] HILFE!

  • Antworten:9
  • Bentwortet
Hannes Beck
  • Forum-Beiträge: 16

22.12.2014, 21:19:19 via Website

Hallo, ich habe heute meine erste richtige App programmiert.
Es soll eine Taschenrechner App sein, die die Grundrechenarten beherrscht.
Diese stürzt Allerdings immer ab mit folgender Fehlermeldung:

java.lang.RuntimeException: Unable to start activity ComponentInfo{de.mr_ac_dev.simplecalc/de.mr_ac_dev.simplecalc.CalcActivity}: java.lang.NumberFormatException: Invalid double: "
Caused by: java.lang.NumberFormatException: Invalid double: "" at de.mr_ac_dev.simplecalc.CalcActivity.onCreate(CalcActivity.java:41)

Daraus schließe ich dass ich irgendwas beim casten des Inhalts des TextEdits zu einer Double variable etwas falsch mache.
Hier mein Java-Quelltext: (Habe den Fehler im Quelltext markiert) Bitte helft mir! :)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calc);
    Toast.makeText(this, "Herzlich Willkommen in meiner App!", Toast.LENGTH_SHORT)
    .show();

    ergebnis = 0;

    plus = (Button) findViewById(R.id.bplus);
    minus = (Button) findViewById(R.id.bminus);
    anzeige = (TextView) findViewById(R.id.tvanzeige);
    zahleins = (EditText) findViewById(R.id.editZ1);
    zahlzwei = (EditText) findViewById(R.id.editZ2);
    mal = (Button) findViewById(R.id.bmal);
    geteilt = (Button) findViewById(R.id.bgeteilt);

    n1 = Double.valueOf(zahleins.getText().toString()); <<<<<<<<<<Hier vermute ich den Fehler
    n2 = Double.valueOf(zahlzwei.getText().toString());

    plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ergebnis = n1 + n2;
            String erg = String.valueOf(ergebnis);
            anzeige.setText(erg);
        }
    });
    minus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ergebnis = n1 - n2;
            String erg = String.valueOf(ergebnis);
            anzeige.setText(erg);
        }
    });
    mal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ergebnis = n1 * n2;
            String erg = String.valueOf(ergebnis);
            anzeige.setText(erg);
        }
    });
    geteilt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ergebnis = n1 / n2;
            String erg = String.valueOf(ergebnis);
            anzeige.setText(erg);
        }
    });
}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.12.2014, 21:27:11 via Website

Hallo Hannes,
Herzlich wilkommen hier im Forum :)

Ja du hast Recht, der Fehler tritt genau hier auf:
n1 = Double.valueOf(zahleins.getText().toString()); <<<<<<<<< n2 = Double.valueOf(zahlzwei.getText().toString());
`

Und zwar tritt dieser auf weil der Code direkt am Anfang bei Start der Activity ausgeführt wird.
Logischer weise sind die Textfelder für die Usereingabe noch leer, deswegen diese Exception.
Somit benötigst du noch einen Button den dubetätigst wenn der User beide Textfelder mit Zahlen befüllt hat.
Erst dann hast kannst du den Code ausfühen aber du soltest trotzden überprüfen ob dein Textfeld befüllt ist.

Lg

LG Pascal //It's not a bug, it's a feature. :) ;)

Hannes Beck

Antworten
pepperonas
  • Forum-Beiträge: 434

22.12.2014, 21:33:32 via Website

Pascal P.

Erst dann hast kannst du den Code ausfühen aber du soltest trotzden überprüfen ob dein Textfeld befüllt ist.

Richtig, ergänzend dazu vielleicht sogar noch überprüfen ob das Textfeld korrekt (sprich mit Zahlen) und gleichzeitig nicht ÜBERfüllt ist. Android tut sich schwer damit 1214515415415414384357348573862376427 * 2 zu rechnen :D

Einen Taschenrechner zu programmieren ist in mancherlei Hinsicht "low-level Stuff", aber wenns gut werden soll, gibt doch eine Menge zu beachten :)

— geändert am 22.12.2014, 21:37:06

Open Source

Hannes Beck

Antworten
Hannes Beck
  • Forum-Beiträge: 16

22.12.2014, 21:43:59 via Website

Ok danke schonmal :) , mir ist ein bisschen unklar wo ich jetzt den OnClick Listener von meinem Bestätigungsbutton setzen muss.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.12.2014, 21:47:26 via Website

Du hast es bei den anderen Buttons doch schon richtig gemacht:

bestaetigung= (Button)findViewById(R.id.bestaetigung);

bestaetigung.setOnClickListener(new View.onClickListener(){...}); // Da dann noch die onClick rein etc.

LG

— geändert am 22.12.2014, 21:47:35

LG Pascal //It's not a bug, it's a feature. :) ;)

Hannes Beck

Antworten
Hannes Beck
  • Forum-Beiträge: 16

22.12.2014, 21:51:09 via Website

Das ist mir Klar, aber welcher Teil von meinem Code muss in die {} des Bestätigungsbuttons. :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.12.2014, 21:53:34 via Website

Der, an dem vorher ein Fehler kommt:

n1 = Double.valueOf(zahleins.getText().toString()); <<<<<<<<<<Hier vermute ich den Fehler
n2 = Double.valueOf(zahlzwei.getText().toString());

Denn du willst ja das Textfeld erst lesen und in eine Double parsen nachdem etwas drinnen Steht.
Aber bitte noch ein paar sachen überprüfen wie länge, dass nur Zahlen drinnen Sind und dass das Feld/die Felder nicht leer sind.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hannes Beck

Antworten
Hannes Beck
  • Forum-Beiträge: 16

22.12.2014, 21:54:43 via Website

Alles Klar Danke :)

— geändert am 22.12.2014, 21:55:28

Antworten
Hannes Beck
  • Forum-Beiträge: 16

22.12.2014, 21:56:30 via Website

Ich geb dann Rückmeldung ob es klappt :)

Antworten
Hannes Beck
  • Forum-Beiträge: 16

22.12.2014, 22:39:46 via Website

Funktioniert jetzt perfekt, danke nochmal :)

Antworten