
Divin93
Erfahrenes Mitglied
- 48
- Themenstarter
- #21
So ich habe den jetzt nochmal komplett neu geschrieben, soweit ist auch alles in Ordnung, habe weder Warnungen noch Errors, die App wird gestartet und wird auch alles korrekt angezeigt, aber die App stürzt ab wenn ein Button geklickt wird, als würde der die Button nicht mit den Methoden verknüpfen.... stimmt da vielleicht was mit dem onClickListener nciht?
XML:
Java Code:
Hier ist die LogCat Ausgabe:
Habe echt keine Ahnung woran das liegen könnte.....
XML:
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" >
<requestFocus />
</EditText>
<Button
android:id="@+id/buttonDelete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="C" />
<LinearLayout
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button7"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="7" />
<Button
android:id="@+id/button8"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="8" />
<Button
android:id="@+id/button9"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="9" />
<Button
android:id="@+id/buttonDivide"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="/" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button4"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="4" />
<Button
android:id="@+id/button5"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="5" />
<Button
android:id="@+id/button6"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="6" />
<Button
android:id="@+id/buttonMultiply"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="x" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button1"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="1" />
<Button
android:id="@+id/button2"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="2" />
<Button
android:id="@+id/button3"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="3" />
<Button
android:id="@+id/buttonSub"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="-" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button0"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="0" />
<Button
android:id="@+id/buttonDot"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="." />
<Button
android:id="@+id/buttonResult"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="=" />
<Button
android:id="@+id/buttonAdd"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="+" />
</LinearLayout>
</LinearLayout>
Code:
package com.example.taschenrechner;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
private EditText werteAnzeige;
private double zwischenErgebnis;
private String zahl;
private boolean letztesADD;
private boolean letztesSUB;
private boolean letztesMULTIPLY;
private boolean letztesDIVIDE;
private boolean letztesRESULT;
/*private final String NULL = "0";
private final String EINS = "1";
private final String ZWEI = "2";
private final String DREI = "3";
private final String VIER = "4";
private final String FÜNF = "5";
private final String SECHS = "6";
private final String SIEBEN = "7";
private final String ACHT = "8";
private final String NEUN = "9";
private final String DOT = ".";*/
private final String RESULT = "=";
private final String ADD = "+";
private final String SUB = "-";
private final String MULTIPLY = "x";
private final String DIVIDE = "/";
@SuppressWarnings("unused")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button Button0 = (Button)findViewById(R.id.button0);
Button0.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(0); //Anzeige erhält den Wert 0
zahl = "0"; //Zwischenspeicher erhält den Wert 0;
}
else{
werteAnzeige.append("0"); //Der Anzeige wird der Wert 0 hinzugefügt
zahl = zahl + 0; //dem Zwischenspeicher wird der Wert 0 hinzugefügt
}
}
});
Button Button1 = (Button)findViewById(R.id.button1);
Button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(1); //Anzeige erhält den Wert 1
zahl = "1"; //Zwischenspeicher erhält den Wert 1
}
else{
werteAnzeige.append("1"); //Der Anzeige wird der Wert 1 hinzugefügt
zahl = zahl + 1; //dem Zwischenspeicher wird der Wert 1 hinzugefügt
}
}
});
Button Button2 = (Button)findViewById(R.id.button2);
Button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(2); //Anzeige erhält den Wert 2
zahl = "2"; //Zwischenspeicher erhält den Wert 2
}
else{
werteAnzeige.append("2"); //Der Anzeige wird der Wert 2 hinzugefügt
zahl = zahl + 2; //dem Zwischenspeicher wird der Wert 2 hinzugefügt
}
}
});
Button Button3 = (Button)findViewById(R.id.button3);
Button3.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(3); //Anzeige erhält den Wert 3
zahl = "3"; //Zwischenspeicher erhält den Wert 3
}
else{
werteAnzeige.append("3"); //Der Anzeige wird der Wert 3 hinzugefügt
zahl = zahl + 3; //dem Zwischenspeicher wird der Wert 3 hinzugefügt
}
}
});
Button Button4 = (Button)findViewById(R.id.button4);
Button4.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(4); //Anzeige erhält den Wert 4
zahl = "4"; //Zwischenspeicher erhält den Wert 4
}
else{
werteAnzeige.append("4"); //Der Anzeige wird der Wert 4 hinzugefügt
zahl = zahl + 4; //dem Zwischenspeicher wird der Wert 4 hinzugefügt
}
}
});
Button Button5 = (Button)findViewById(R.id.button5);
Button5.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(5); //Anzeige erhält den Wert 5
zahl = "5"; //Zwischenspeicher erhält den Wert 5
}
else{
werteAnzeige.append("5"); //Der Anzeige wird der Wert 5 hinzugefügt
zahl = zahl + 5; //dem Zwischenspeicher wird der Wert 5 hinzugefügt
}
}
});
Button Button6 = (Button)findViewById(R.id.button6);
Button6.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(6); //Anzeige erhält den Wert 6
zahl = "6"; //Zwischenspeicher erhält den Wert 6
}
else{
werteAnzeige.append("6"); //Der Anzeige wird der Wert 6 hinzugefügt
zahl = zahl + 6; //dem Zwischenspeicher wird der Wert 6 hinzugefügt
}
}
});
Button Button7 = (Button)findViewById(R.id.button7);
Button7.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(7); //Anzeige erhält den Wert 7
zahl = "7"; //Zwischenspeicher erhält den Wert 7
}
else{
werteAnzeige.append("7"); //Der Anzeige wird der Wert 7 hinzugefügt
zahl = zahl + 7; //dem Zwischenspeicher wird der Wert 7 hinzugefügt
}
}
});
Button Button8 = (Button)findViewById(R.id.button8);
Button8.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(8); //Anzeige erhält den Wert 8
zahl = "8"; //Zwischenspeicher erhält den Wert 8
}
else{
werteAnzeige.append("8"); //Der Anzeige wird der Wert 8 hinzugefügt
zahl = zahl + 8; //dem Zwischenspeicher wird der Wert 8 hinzugefügt
}
}
});
Button Button9 = (Button)findViewById(R.id.button9);
Button9.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(werteAnzeige.getText().toString().equals(0) || letztesRESULT){
letztesRESULT = false; //neue Rechnung beginnt
werteAnzeige.setText(9); //Anzeige erhält den Wert 9
zahl = "9"; //Zwischenspeicher erhält den Wert 9
}
else{
werteAnzeige.append("9"); //Der Anzeige wird der Wert 9 hinzugefügt
zahl = zahl + 9; //dem Zwischenspeicher wird der Wert 9 hinzugefügt
}
}
});
Button ButtonAdd = (Button)findViewById(R.id.buttonAdd);
ButtonAdd.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(!zahl.equals("")){ //nur wenn Zahl eingegeben wurde, erfolgt eine Rechnung
if(letztesSUB){
zwischenErgebnis = zwischenErgebnis - Double.parseDouble(zahl);// Vom Zwischenergebnis wird die Zahl abgezogen, die vor der Rechnung eingegeben wurde
letztesSUB = false;
}
else if(letztesMULTIPLY){
zwischenErgebnis = zwischenErgebnis * Double.parseDouble(zahl);// Das Zwischenergebnis wird mit der Zahl multipliziert, die vor der Rechnung eingegeben wurde
letztesMULTIPLY = false;
}
else if(letztesDIVIDE){
zwischenErgebnis = zwischenErgebnis / Double.parseDouble(zahl);// Das Zwischenergebnis wird durch die Zahl geteilt, die vor der Rechnung eingegeben wurde
letztesDIVIDE = false;
}
else{
zwischenErgebnis = zwischenErgebnis + Double.parseDouble(zahl);// Dem Zwischenergebnis wird die Zahl hizugefügt, die vor der Rechnung eingegeben wurde
}
werteAnzeige.append(ADD); //der Anzeige wird ein Pluszeichen hinzugefügt
letztesADD = true; // die letzte Rechnung ist eine Addition
zahl = ""; // der Zwischenspeicher wird "geleert"
}
}
});
Button ButtonSub = (Button)findViewById(R.id.buttonSub);
ButtonSub.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(!zahl.equals("")){ //nur wenn Zahl eingegeben wurde, erfolgt eine Rechnung
if(letztesADD){
zwischenErgebnis = zwischenErgebnis + Double.parseDouble(zahl);// Dem Zwischenergebnis wird die Zahl hinzugefügt, die vor der Rechnung eingegeben wurde
letztesADD = false;
}
else if(letztesMULTIPLY){
zwischenErgebnis = zwischenErgebnis * Double.parseDouble(zahl);// Das Zwischenergebnis wird mit der Zahl multipliziert, die vor der Rechnung eingegeben wurde
letztesMULTIPLY = false;
}
else if(letztesDIVIDE){
zwischenErgebnis = zwischenErgebnis / Double.parseDouble(zahl);// Das Zwischenergebnis wird durch die Zahl geteilt, die vor der Rechnung eingegeben wurde
letztesDIVIDE = false;
}
else{
zwischenErgebnis = zwischenErgebnis - Double.parseDouble(zahl);// Vom Zwischenergebnis wird die Zahl abgezogen, die vor der Rechnung eingegeben wurde
}
werteAnzeige.append(SUB); //der Anzeige wird ein Minuszeichen hinzugefügt
letztesSUB = true; // die letzte Rechnung ist eine Subtraktion
zahl = ""; // der Zwischenspeicher wird "geleert"
}
}
});
Button ButtonMultiply = (Button)findViewById(R.id.buttonMultiply);
ButtonMultiply.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(!zahl.equals("")){ //nur wenn Zahl eingegeben wurde, erfolgt eine Rechnung
if(letztesADD){
zwischenErgebnis = zwischenErgebnis + Double.parseDouble(zahl);// Dem Zwischenergebnis wird die Zahl hinzugefügt, die vor der Rechnung eingegeben wurde
letztesADD = false;
}
else if(letztesSUB){
zwischenErgebnis = zwischenErgebnis - Double.parseDouble(zahl);// Vom Zwischenergebnis wird die Zahl abgezogen, die vor der Rechnung eingegeben wurde
letztesSUB = false;
}
else if(letztesDIVIDE){
zwischenErgebnis = zwischenErgebnis / Double.parseDouble(zahl);// Das Zwischenergebnis wird durch die Zahl geteilt, die vor der Rechnung eingegeben wurde
letztesDIVIDE = false;
}
else{
zwischenErgebnis = zwischenErgebnis * Double.parseDouble(zahl);// Das Zwischenergebnis wird mit die Zahl multipliziert, die vor der Rechnung eingegeben wurde
}
werteAnzeige.append(MULTIPLY); //der Anzeige wird ein Malzeichen hinzugefügt
letztesMULTIPLY = true; // die letzte Rechnung ist eine Multiplikation
zahl = ""; // der Zwischenspeicher wird "geleert"
}
}
});
Button ButtonDivide = (Button)findViewById(R.id.buttonDivide);
ButtonDivide.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(!zahl.equals("")){ //nur wenn Zahl eingegeben wurde, erfolgt eine Rechnung
if(letztesADD){
zwischenErgebnis = zwischenErgebnis + Double.parseDouble(zahl);// Dem Zwischenergebnis wird die Zahl hinzugefügt, die vor der Rechnung eingegeben wurde
letztesADD = false;
}
else if(letztesSUB){
zwischenErgebnis = zwischenErgebnis - Double.parseDouble(zahl);// Vom Zwischenergebnis wird die Zahl abgezogen, die vor der Rechnung eingegeben wurde
letztesSUB = false;
}
else if(letztesMULTIPLY){
zwischenErgebnis = zwischenErgebnis * Double.parseDouble(zahl);// Das Zwischenergebnis wird mit der Zahl multipliziert, die vor der Rechnung eingegeben wurde
letztesMULTIPLY = false;
}
else{
zwischenErgebnis = zwischenErgebnis / Double.parseDouble(zahl);// Das Zwischenergebnis wird durch die Zahl geteilt, die vor der Rechnung eingegeben wurde
}
werteAnzeige.append(DIVIDE); //der Anzeige wird ein Geteiltzeichen hinzugefügt
letztesDIVIDE = true; // die letzte Rechnung ist eine Division
zahl = ""; // der Zwischenspeicher wird "geleert"
}
}
});
Button ButtonResult = (Button)findViewById(R.id.buttonResult);
ButtonDivide.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(!zahl.equals("")){
if(letztesADD){
zwischenErgebnis = zwischenErgebnis + Double.parseDouble(zahl); // Dem Zwischenergebnis wird die Zahl hinzuaddiert, die vor dem Rechenzeichen eingegeben wurde
letztesADD = false; //weil Rechnung jetzt abgearbeitet
werteAnzeige.append(RESULT + zwischenErgebnis); // Der Anzeige wird das Gleichheitszeichen und das Ergebnis hinzugefügt
}
if(letztesSUB){
zwischenErgebnis = zwischenErgebnis - Double.parseDouble(zahl); // Vom Zwischenergebnis wird die Zahl abgezogen, die vor dem Rechenzeichen eingegeben wurde
letztesSUB = false; //weil Rechnung jetzt abgearbeitet
werteAnzeige.append(RESULT + zwischenErgebnis); // Der Anzeige wird das Gleichheitszeichen und das Ergebnis hinzugefügt
}
if(letztesMULTIPLY){
zwischenErgebnis = zwischenErgebnis * Double.parseDouble(zahl); // Das Zwischenergebnis wird mit der Zahl multipliziert, die vor dem Rechenzeichen eingegeben wurde
letztesMULTIPLY = false; //weil Rechnung jetzt abgearbeitet
werteAnzeige.append(RESULT + zwischenErgebnis); // Der Anzeige wird das Gleichheitszeichen und das Ergebnis hinzugefügt
}
if(letztesDIVIDE){
zwischenErgebnis = zwischenErgebnis / Double.parseDouble(zahl); // Das Zwischenergebnis wird durch die Zahl geteilt, die vor dem Rechenzeichen eingegeben wurde
letztesDIVIDE = false; //weil Rechnung jetzt abgearbeitet
werteAnzeige.append(RESULT + zwischenErgebnis); // Der Anzeige wird das Gleichheitszeichen und das Ergebnis hinzugefügt
}
zahl = ""; //Zwischenspeicher wird "geleert"
zwischenErgebnis = 0; //Zwischenergebnis wird "geleert
letztesRESULT = true; //Rechnung ist abgeschlossen
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
Hier ist die LogCat Ausgabe:
Code:
05-25 16:47:22.249: E/Trace(776): error opening trace file: No such file or directory (2)
05-25 16:47:23.249: D/dalvikvm(776): GC_CONCURRENT freed 77K, 7% free 2783K/2980K, paused 14ms+16ms, total 78ms
05-25 16:47:23.509: D/gralloc_goldfish(776): Emulator without GPU emulation detected.
05-25 16:47:40.509: D/AndroidRuntime(776): Shutting down VM
05-25 16:47:40.509: W/dalvikvm(776): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-25 16:47:40.519: E/AndroidRuntime(776): FATAL EXCEPTION: main
05-25 16:47:40.519: E/AndroidRuntime(776): java.lang.NullPointerException
05-25 16:47:40.519: E/AndroidRuntime(776): at com.example.taschenrechner.MainActivity$6.onClick(MainActivity.java:114)
05-25 16:47:40.519: E/AndroidRuntime(776): at android.view.View.performClick(View.java:4204)
05-25 16:47:40.519: E/AndroidRuntime(776): at android.view.View$PerformClick.run(View.java:17355)
05-25 16:47:40.519: E/AndroidRuntime(776): at android.os.Handler.handleCallback(Handler.java:725)
05-25 16:47:40.519: E/AndroidRuntime(776): at android.os.Handler.dispatchMessage(Handler.java:92)
05-25 16:47:40.519: E/AndroidRuntime(776): at android.os.Looper.loop(Looper.java:137)
05-25 16:47:40.519: E/AndroidRuntime(776): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-25 16:47:40.519: E/AndroidRuntime(776): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 16:47:40.519: E/AndroidRuntime(776): at java.lang.reflect.Method.invoke(Method.java:511)
05-25 16:47:40.519: E/AndroidRuntime(776): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-25 16:47:40.519: E/AndroidRuntime(776): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-25 16:47:40.519: E/AndroidRuntime(776): at dalvik.system.NativeStart.main(Native Method)
05-25 16:47:43.418: I/Process(776): Sending signal. PID: 776 SIG: 9
Habe echt keine Ahnung woran das liegen könnte.....
Zuletzt bearbeitet: