Hilfe ich finde den Fehler nicht -> Buttonbetätigung bei einem Taschenrechner

  • Antworten:9
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 4

26.04.2015, 19:06:58 via Website

Hallo,
ich habe folgenden Code für einen Taschenrechner mit den Grundrechenarten erstellt. Leider finde ich den Fehler nicht,s. warum mein Buttons keine Wert in den Edittext übergeben und anzeigen. Sprich in der Simulation kann ich zwar auf die Buttons drücken aber es passiert nichts. Da ich leider Anfänger bin und ich diesen Taschenrechner für einen Informatikvortrag lauffähig machen muss, benötige ich eure Hilfe. Der Quellcode wurde mit aktuellen Android Studio geschrieben.

Vielen Dank schonmal!!!!

Eingabejava

package de yolotec taschenrechnermastya;

import android.content.DialogInterface;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class Eingabe extends ActionBarActivity {

private EditText Scr;    // Eingabefeld
private float NumberBf;  // speichert Eingabefeld
private String operation;
private ButtonClickListener btnClick;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_eingabe);
    Scr = (EditText) findViewById(R.id.Anzeige);

    int idList[] = {R.id.button0,R.id.button1,R.id.button2,R.id.button3,R.id.buttonaddieren,R.id.button6,R.id.button7,R.id.button8,
            R.id.button9,R.id.buttonaddieren,R.id.button5,R.id.buttonmal,R.id.buttongeteilt,
            R.id.buttonfakultät,R.id.buttonlöschen,R.id.buttonsqrt,R.id.buttonergebnis,R.id.button5
    };
    for (int id:idList) {
        View v = findViewById(id);
        v.setOnClickListener(btnClick);
    }

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_eingabe, menu);
    return true;
}

public void mMath(String str){
    NumberBf = Float.parseFloat(Scr.getText().toString());
    operation = str;
    Scr.setText("0");
}

public void getKeyboard(String str){
    String ScrCurrent = Scr.getText().toString();
    if (ScrCurrent.equals("0"))
        ScrCurrent = "";
    ScrCurrent += str;
    Scr.setText(ScrCurrent);
}

public void mResult() {
    float NumAf = Float.parseFloat(Scr.getText().toString());
    float result = 0;
    if (operation.equals("+")){
        result = NumAf + NumberBf;
    }

    if (operation.equals("-")){
        result = NumberBf - NumAf;
    }

    if (operation.equals("*")){
        result = NumAf * NumberBf;
    }

    if (operation.equals("/")){
        result = NumberBf / NumAf;
    }

    if (operation.equals("Sqrt")){
        result = (float) Math.sqrt(NumberBf);
    }

    // if (operation.equals("n!")){
    //   result = NumAf n! NumberBf;
    // }

    Scr.setText(String.valueOf(result));
}



private class ButtonClickListener implements View.OnClickListener {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.buttonlöschen:
                Scr.setText("0");
                NumberBf = 0;
                operation = "";
                break;
            case R.id.buttonaddieren:
                mMath("+");
                break;
            case R.id.buttonminus:
                mMath("-");
                break;
            case R.id.buttonmal:
                mMath("*");
                break;
            case R.id.buttongeteilt:
                mMath("/");
                break;
            case R.id.buttonsqrt:
                mMath("Sqrt");
                break;
            case R.id.buttonergebnis:
                mResult();
                break;
            default:
                String numb = ((Button) v).getText().toString();
                getKeyboard(numb);
                break;
        }
    }
}




@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

eingabe xml

<RelativeLayout xmlns:android="schemas.android.com/apk/res/android"
    xmlns:tools="schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".Eingabe">

    <Button
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:text="@string/ergebnis"
        android:id="@+id/buttonergebnis"
        android:layout_above="@+id/buttonlöschen"
        android:layout_centerHorizontal="true"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/löschen"
        android:id="@+id/buttonlöschen"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:clickable="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:text="@string/anzeige"
        android:id="@+id/Anzeige"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:gravity="center|right"
        android:textSize="@dimen/abc_text_size_title_material"
        android:inputType="number" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button1"
        android:id="@+id/button1"
        android:layout_below="@+id/Anzeige"

        android:layout_marginTop="71dp"
        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button2"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button1"
        android:layout_toRightOf="@+id/button1"
        android:layout_toEndOf="@+id/button1"
        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttonplus"
        android:id="@+id/buttonaddieren"
        android:layout_toRightOf="@+id/button3"
        android:layout_above="@+id/buttonminus"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button6"
        android:id="@+id/button6"
        android:layout_below="@+id/button1"
        android:layout_toRightOf="@+id/button5"
        android:layout_toEndOf="@+id/button5"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button4"
        android:id="@+id/buttonaddieren"
        android:layout_below="@+id/button1"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignStart="@+id/button1"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttonminus"
        android:id="@+id/buttonminus"
        android:layout_toRightOf="@+id/button3"
        android:layout_above="@+id/buttonmal"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button5"
        android:id="@+id/button5"
        android:layout_toRightOf="@+id/buttonaddieren"
        android:layout_alignTop="@+id/buttonaddieren"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button3"
        android:id="@+id/button3"
        android:layout_toRightOf="@+id/button2"
        android:layout_above="@+id/button6"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button7"
        android:id="@+id/button7"
        android:layout_below="@+id/buttonaddieren"
        android:layout_toLeftOf="@+id/button5"
        android:layout_toStartOf="@+id/button5"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button8"
        android:id="@+id/button8"
        android:layout_below="@+id/buttonaddieren"
        android:layout_toRightOf="@+id/button7"
        android:layout_toEndOf="@+id/button7"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button9"
        android:id="@+id/button9"
        android:layout_below="@+id/button5"
        android:layout_toRightOf="@+id/button5"
        android:layout_toEndOf="@+id/button5"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttonmal"
        android:id="@+id/buttonmal"
        android:layout_alignTop="@+id/button9"
        android:layout_toRightOf="@+id/button9"
        android:layout_toEndOf="@+id/button9"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttonsqrt"
        android:id="@+id/buttonsqrt"
        android:layout_below="@+id/button7"
        android:layout_alignLeft="@+id/button7"
        android:layout_alignStart="@+id/button7"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button0"
        android:id="@+id/button0"
        android:layout_below="@+id/button7"
        android:layout_toRightOf="@+id/buttonsqrt"
        android:layout_toEndOf="@+id/buttonsqrt"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttonfakultät"
        android:id="@+id/buttonfakultät"
        android:layout_below="@+id/button8"
        android:layout_toRightOf="@+id/button8"
        android:layout_toEndOf="@+id/button8"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttongeteilt"
        android:id="@+id/buttongeteilt"
        android:layout_below="@+id/button9"
        android:layout_toRightOf="@+id/buttonfakultät"
        android:layout_toEndOf="@+id/buttonfakultät"

        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="false"
        android:clickable="true" />

</RelativeLayout>

— geändert am 26.04.2015, 19:11:14

Antworten
  • Forum-Beiträge: 2.492

27.04.2015, 08:07:58 via App

Ich bin mir nicht sicher, vielleicht solltest du das mal Schritt für Schritt debuggen dann kannst du sehen wo der Fehler ist.
Vielleicht kannst du mal versuchen in der Keyboard Methode nicht str += str zu benutzen sondern mit der concat() Methode zu arbeiten.

Und da du ja alle Buttons selber erstellt hast brauchst du dann überhaupt noch ein EditText? Geht nicht ein normales TextView?

— geändert am 27.04.2015, 08:09:20

Antworten
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.164

27.04.2015, 10:38:40 via App

Hallo stoni,

herzlich willkommen hier im Entwickler Forum(*)

R.id.buttonlöschen ich denke das ist der Fehler nutze stattdessen oe statt ö.

Dein Thread hab ich gleich mal in den richtigen Bereich verschoben.

— geändert am 27.04.2015, 11:35:06

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Antworten
  • Forum-Beiträge: 4

27.04.2015, 12:23:59 via Website

Wie kann ich denn in android studio Zeile für Zeile Debuggen?

Grundsätzlich würde sicherlich auch textview gehen, ich werde es heute abend mal ausprobieren und auch das ö mit oe austauschen.

Was ist die concat Methode?

— geändert am 27.04.2015, 12:27:04

Antworten
  • Forum-Beiträge: 2.492

27.04.2015, 12:37:52 via Website

Wie du allgemein Debuggen kannst weißt du?
Hab es schon länger nicht mehr gemacht, aber ich glaube Zeile für Zeile kannst du machen, indem du erst einen Breakpoint setzt und dann mit F8 weiter gehst. Manchmal geht der dann aber auch in irgendwelche Java Libraries rein, was ja nicht nötig ist (das kann man bestimmt auch irgendwie abschalten hab ich mich aber noch nicht mit beschäftigt).
Du kannst aber auch an alle wichtigen Stellen einen Breakpoint setzen und dann mit F9 von Breakpoint zu Breakpoint springen.

Die Concat Methode verbindet Strings, so wie du es mit dem + gemacht hast.

String str1 = "Hallo";
String str2 = " Welt";
str1 = str1.concat(str2);

So müsste die Syntax sein.
str1 ist jetzt "Hallo Welt".

— geändert am 27.04.2015, 12:38:29

Antworten
  • Forum-Beiträge: 1.904

27.04.2015, 12:46:18 via App

Meinst du mit "in der Simulation" den Designer in Android Studio? Wenn ja, dann solltest du die App auf einem richtigen Gerät starten, denn der Designer zeigt nur das Layout an und hat keine Logik (buttonclicks)

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
  • Forum-Beiträge: 4

27.04.2015, 16:05:48 via Website

Nein ich meinte das probieren im Emulator, in dem die Logik ja eigentlich funktionieren sollte oder?

Das umändern von ö zu oe hat leider keine Änderung gebracht.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

27.04.2015, 16:11:47 via Website

Woher nimmst du die instanz des onClick Listeners?

 for (int id:idList) {
        View v = findViewById(id);
        v.setOnClickListener(btnClick);
    }

die Variable btnClick ist bei dir nicht definiert.
Da fehlt vor der for schleife ein

ButtonClickListener btnClick = new ButtonClickListener();

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

Antworten
  • Forum-Beiträge: 4

28.04.2015, 07:40:14 via Website

Hallo Pascal,

danke für deinen Tipp!!! Das war die Lösung für meinen Fehler!!! Ich dachte eigentlich, dass ich btnClick durch die Definition der private class ButtonClicklistener ebenfalls automatisch definiert habe...Naja falsch gedacht würde ich sagen!! Trotzdem vielen lieben Dank für eure Hilfe!

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

28.04.2015, 16:07:20 via App

Bitte setze deinen Thread noch auf Beantwortet, indem du im Browser über deinem ersten Post auf "Mehr"->"Beantwortet" klickst.

Danke (smug)

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

Antworten

Empfohlene Artikel