danke. Sollte als Hinweis genügen.
Netter Spruch übrigens mit dem Käse und so.
danke. Sollte als Hinweis genügen.
Netter Spruch übrigens mit dem Käse und so.
Hallo,
ich habe folgendes proble:
Trage ich in den AVD in ein EditText (mit numberDecimal) an die erste Stelle einen '.' ein so bricht dieser mit einem unexpected error ab.
Wie kann ich das beheben?
Hallo Zusammen,
ich bin dabei meine erste App zu entwickeln und habe mich für meine Problemstellungen auf das Rudimentärste beschränkt. Es wäre schön hier entsprechende Antworten zu bekommen.
Die App hat 2 Textfelder in der double eingetragen werden können. Es gibt eine Checkbox die ein weiteres Textfeld sichtbar und unsichtbar macht. Das Textfeld bleibt für die Problemstellungen erstmal unberücksichtigt; wichtig hierbei ist mir die Validierung der CheckBox. Die Einträge sollen subtrahiert und im Taost das Ergebnis angezeigt werden. OnClick button soll ausgeführt werden.
Hauptprobleme (Ausführung des Programms auf einem AVD):
1) Leereinträge in den Textfeldern beim 1. Ausführen in neugestartetem AVD nachdem die App aufgerufen wurde (also Button klicken) -> Führt zum unexpected error und zum Abbruch der App (Speicherverhalten, Datenherkunft)
2) Beim 1. Ausführen in neugestartetem AVD ohne die Checkbox zu checken gibt die Variable 'test = null' aus (keine Bedingung der if(Zeile 56) ist gültig...) (Speicherverhalten, Datenherkunft)
3) Wenn Einträge nach dem 1. Ausführen statt gefunden haben, so sind diese für alle weiteren Ausführungen gültig - Im Toast wird die anzeige der einzelnen Variablen zwar geändert, für die Berechnung 'b = sourcedata - sourcedat;' behält 'b' jedoch den Wert der 1. Ausführung des Programms(Datentypen, Speicherverhalten).
Bs.:
1. Ausführung: 2-2=0
2. Ausführung: 3-2=0 (Das Programm führt die Berechnung nicht erneut aus, sondern behält den Wert des 1. Aufrufs)
package com.example.calc;
import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
// import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
/**
GRUNDSÄTZLICHES PROBLEM:
- Leereinträge in den Textfeldern beim 1. Ausführen des Programms nachdem die App aufgerufen wurde (also Button klicken) -> Führt zum unexpected error und zum Abbruch der App
- beim 1. Ausführen des Programms ohne die Checkbox zu checken gibt die Variable 'test = null' aus (keine Bedingung der if ist gültig...)
- Wenn Einträge nach dem 1. Ausführen statt gefunden haben, so sind diese für alle weiteren Ausführungen gültig - Im Toast wird die anzeige der einzelnen Variablen zwar geändert,
für die berechnung 'b = sourcedata - sourcedat;' bewhält 'b' jedoch den Wert der 1. Ausführung des Programms
*/
public class MainActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private EditText eText1, eText2, eText6;
private Button button;
private CheckBox check;
public String test;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addListenerOnButton();
check = (CheckBox) findViewById(R.id.checkBox1);
eText6 = (EditText) findViewById(R.id.editText6);
}
public void onClickCheckImOk(View v) {
// TEST: was ist gültig
// PROBLEM: Beim ersten Aufruf des Programms ohne die Checkbox zu checken liefert 'test = null' im Toast beim Klicken des Button
/**
Bemerke - CodeParser liefert:
int android.view.View.VISIBLE=0[0x0]
int android.view.View.INVISIBLE=4[0x4]
*/
if(check.isChecked()) {
eText6.setVisibility(EditText.VISIBLE);
test = "checkbox checked";
} else {
eText6.setVisibility(EditText.INVISIBLE);
test = "checkbox unchecked";
}
}
public void onClickFix(View v) {
check.setChecked(true);
eText6.setVisibility(EditText.VISIBLE);
}
public void addListenerOnButton() {
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
private double b;
private double sourcedata;
private double sourcedat;
private double ourced;
private Editable eT1;
private Editable eT2;
private Editable eT6;
private String eText1a;
private String eText2a;
private String eText6a;
@Override
public void onClick(View v) {
sourcedata = Double.valueOf(eText1.getText().toString());
sourcedat = Double.valueOf(eText2.getText().toString());
ourced = Double.valueOf(eText6.getText().toString());
// PROBLEM: Beim ersten Aufruf des Programms mit einem Leerstring bricht der Emulator mit einem "unexpected error" die App ab
eText1 = (EditText) findViewById(R.id.editText1);
eText2 = (EditText) findViewById(R.id.editText2);
eText6 = (EditText) findViewById(R.id.editText6);
eText1a = String.valueOf(eText1.getText().toString());
b = sourcedata - sourcedat;
try {
View.OnClickListener handler = new View.OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
// PROBLEM: Beim ersten Aufruf des Programms mit einem Leerstring bricht der Emulator mit einem "unexpected error" die App ab
eT1 = eText1.getText();
if (eT1.equals("") || eT1.equals(0) || eT1.equals("0") || eT1.equals(null) || eT1.toString().equals("")){
eText1.setText("1");
sourcedata = 1;
}
eT2 = eText2.getText();
if (eT2.equals("") || eT2.equals("0") || eT2.equals(0) || eT2.equals(null) || eT2.toString().equals("")){
eText2.setText("1");
sourcedat = 1;
}
eT6 = eText6.getText();
if (eT6.equals("") || eT6.equals("0") || eT6.equals(0) || eT6.equals(null) || eT6.toString().equals("")){
eText6.setText("1");
ourced = 1;
}
// VERSUCH/PROBLEM: mit "eText1a"(stellvertretend für sourcedata) einen Leereintrag schlägt fehl
if(sourcedata <= 0 || sourcedat <= 0 || ourced <= 0 || eText1a == "" || eText2a== "" || eText6a = ""){
Toast.makeText( MainActivity.this,
"Enter something",
Toast.LENGTH_SHORT).show();
break;
}else{
Toast.makeText(MainActivity.this,
"- Result" +
"\n"+ sourcedata + " - " + sourcedat + " = " + b+
"\nTest Checkbox: "+ test,
Toast.LENGTH_LONG).show();
break;
}
}
}
};
findViewById(R.id.button).setOnClickListener(handler);
}
catch (NullPointerException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Alles anzeigen
Nebenproblem:
Am Rande, das Exceptionhandling stört mich irgendwie... - Hat jemand eine Idee wie ich das ohne einen try-block hinbekomme? Der Code ist ein paar Tage älter, ich weiss nicht mehr was die Nullpointerexception erzeugt...